diff GEMBASSY-1.0.3/gsoap/src/soapcpp2.c @ 0:8300eb051bea draft

Initial upload
author ktnyt
date Fri, 26 Jun 2015 05:19:29 -0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/GEMBASSY-1.0.3/gsoap/src/soapcpp2.c	Fri Jun 26 05:19:29 2015 -0400
@@ -0,0 +1,329 @@
+/*
+	soapcpp2.c
+
+	Main compiler and code generator batch program.
+
+gSOAP XML Web services tools
+Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc. All Rights Reserved.
+This part of the software is released under one of the following licenses:
+GPL or Genivia's license for commercial use.
+--------------------------------------------------------------------------------
+GPL license.
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place, Suite 330, Boston, MA 02111-1307 USA
+
+Author contact information:
+engelen@genivia.com / engelen@acm.org
+
+This program is released under the GPL with the additional exemption that
+compiling, linking, and/or using OpenSSL is allowed.
+--------------------------------------------------------------------------------
+A commercial use license is available from Genivia, Inc., contact@genivia.com
+--------------------------------------------------------------------------------
+*/
+
+#include "soapcpp2.h"
+
+#ifndef SOAPCPP2_IMPORT_PATH
+#define SOAPCPP2_IMPORT_PATH (NULL)
+#endif
+
+extern void init(void);
+extern int yyparse(void);
+extern FILE *yyin;
+
+extern char *ns_cname(char*, char*);
+
+FILE *fmsg;		/* fd to flush compiler messages */
+
+int vflag = 0;		/* SOAP version, -1=no SOAP, 0=not set, 1=1.1, 2=1.2 */
+int wflag = 0;		/* when set, don't generate WSDL and schema files */
+int Cflag = 0;		/* when set, generate only files for clients */
+int cflag = 0;		/* when set, generate files with .c extension */
+int aflag = 0;		/* when set, use value of SOAP Action to dispatch method at server side */
+int Aflag = 0;		/* when set, require SOAP Action to dispatch method at server side */
+int bflag = 0;		/* when set, serialize byte arrays char[N] as string */
+int eflag = 0;		/* when set, use SOAP RPC encoding by default */
+unsigned long fflag = 0;/* multi-file split for each bundle of -fN defs */
+int iflag = 0;		/* when set, generate new style proxy/object classes inherited from soap struct */
+int jflag = 0;		/* when set, generate new style proxy/object classes */
+int kflag = 0;		/* when set, generate data traversal/walker routines */
+int mflag = 0;		/* when set, generate code that requires array/binary classes to explicitly remove malloced array */
+int nflag = 0;		/* when set, names the namespaces global struct '%NAME%_namespaces */
+int lflag = 0;		/* when set, create library */
+int Lflag = 0;		/* when set, don't generate soapClientLib/soapServerLib */
+int Qflag = 0;		/* when set, use C++ namespaces for custom serializers */
+int sflag = 0;		/* when set, generate strict validation checks */
+int Sflag = 0;		/* when set, generate only files for servers */
+int Tflag = 0;		/* when set, generates server auto-test code */
+int tflag = 0;		/* when set, generates typed messsages (with xsi:type attributes) */
+int uflag = 0;		/* when set, uncomment WSDL and schema output */
+int xflag = 0;		/* when set, don't generate sample XML message files */
+int yflag = 0;		/* when set, add C/C++ info in sample XML messages */
+int zflag = 0;		/* when set, use backward compatibility option */
+
+int stop_flag = 0;
+
+char dirpath[1024];	/* directory path for generated source files */
+char *prefix = "soap";	/* file name prefix for generated source files */
+char filename[1024];	/* current file name */
+char *importpath = SOAPCPP2_IMPORT_PATH; /* default file import path */
+
+/*
+IMPORTANT:
+
+The terms and conditions of use of this software do not allow for the removal
+of the copyright notice from the main program for visual display. For
+integrations with other software, a similar copyright notice must be produced
+that is visible to users of the software.
+*/
+
+int
+main(int argc, char **argv)
+{	int i, g;
+	char *a, *s;
+	fmsg = stderr;
+	strcpy(filename, "<stdin>");
+	for (i = 1; i < argc; i++)
+	{	a = argv[i];
+		if (*a == '-'
+#ifdef WIN32
+		 || *a == '/'
+#endif
+		)
+		{	g = 1;
+			while (g && *++a)
+				switch (*a)
+				{	case 'C':
+						Cflag = 1;
+						if (Sflag)
+            					  fprintf(stderr, "soapcpp2: using both options -C and -S omits client/server code\n");
+						break;
+					case 'c':
+						cflag = 1;
+						break;
+					case 'd':
+						a++;
+						g = 0;
+						if (*a)
+							strcpy(dirpath, a);
+						else if (i < argc && argv[++i])
+							strcpy(dirpath, argv[i]);
+						else
+							execerror("Option -d requires a directory path");
+						if (*dirpath && dirpath[strlen(dirpath)-1] != '/' && dirpath[strlen(dirpath)-1] != '\\')
+							strcat(dirpath, SOAP_PATHCAT);
+						break;
+					case 'e':
+						eflag = 1;
+						break;
+					case 'f':
+						a++;
+						g = 0;
+						if (*a)
+							fflag = strtoul(a, NULL, 10);
+						else if (i < argc && argv[++i])
+							fflag = strtoul(argv[i], NULL, 10);
+						if (!fflag)
+							execerror("Option -f requires a value");
+						if (fflag < 10)
+						  fflag = 10;
+						break;
+					case 'a':
+						aflag = 1;
+						break;
+					case 'A':
+						aflag = 1;
+						Aflag = 1;
+						break;
+					case 'b':
+						bflag = 1;
+						break;
+					case '?':
+					case 'h':
+						fprintf(stderr, "Usage: soapcpp2 [-0|-1|-2] [-C|-S] [-T] [-L] [-a] [-A] [-b] [-c] [-d path] [-e] [-f N] [-h] [-i] [-I path"SOAP_PATHSEP"path"SOAP_PATHSEP"...] [-k] [-l] [-m] [-n] [-p name] [-s] [-t] [-u] [-v] [-w] [-x] [-y] [-z#] [infile]\n\n");
+						fprintf(stderr, "\
+-1      generate SOAP 1.1 bindings\n\
+-2      generate SOAP 1.2 bindings\n\
+-0      remove SOAP bindings, use REST\n\
+-C	generate client-side code only\n\
+-S	generate server-side code only\n\
+-T	generate server auto-test code\n\
+-L	don't generate soapClientLib/soapServerLib\n\
+-a	use SOAPAction with WS-Addressing to invoke server-side operations\n\
+-A	require SOAPAction to invoke server-side operations\n\
+-b	serialize byte arrays char[N] as string\n\
+-c      generate C source code\n\
+-dpath  use path to save files\n\
+-e	generate SOAP RPC encoding style bindings\n\
+-fN	file split of N XML serializer implementations per file (N>=10)\n\
+-h	display help info\n\
+-Ipath  use path(s) for #import (paths separated with '"SOAP_PATHSEP"')\n\
+-i      generate C++ service proxies and objects inherited from soap struct\n\
+-j      generate C++ service proxies and objects that share a soap struct\n\
+-k      generate data structure walkers (experimental)\n\
+-l      generate linkable modules (experimental)\n\
+-m      generate Matlab(tm) code for MEX compiler\n\
+-n      use service name to rename service functions and namespace table\n\
+-pname  save files with new prefix name instead of 'soap'\n\
+-Qname  use name as the C++ namespace for decls, including custom serializers\n\
+-qname  use name as the C++ namespace for decls, excluding custom serializers\n\
+-s      generate deserialization code with strict XML validation checks\n\
+-t      generate code for fully xsi:type typed SOAP/XML messaging\n\
+-u	uncomment comments in WSDL/schema output by suppressing XML comments\n\
+-v	display version info\n\
+-w	don't generate WSDL and schema files\n\
+-x	don't generate sample XML message files\n\
+-y	include C/C++ type access information in sample XML messages\n\
+-z1	generate deprecated old-style C++ service proxies and objects\n\
+infile	header file to parse (or stdin)\n\
+\n");
+						exit(0);
+					case 'I':
+						a++;
+						g = 0;
+						s = NULL;
+						if (*a)
+							s = a;
+						else if (i < argc && argv[++i])
+							s = argv[i];
+						else
+							execerror("Option -I requires an import path");
+						if (importpath && s)
+						{	char *t	= emalloc(strlen(importpath) + strlen(s) + 2);
+							strcpy(t, importpath);
+							strcat(t, SOAP_PATHSEP);
+							strcat(t, s);
+							importpath = t;
+						}
+						else
+							importpath = s;
+						break;
+					case 'i':
+						iflag = 1;
+						break;
+					case 'j':
+						jflag = 1;
+						break;
+					case 'k':
+						kflag = 1;
+						break;
+					case 'm':
+						mflag = 1;
+						break;
+					case 'n':
+						nflag = 1;
+						break;
+					case 'l':
+						lflag = 1;
+						break;
+					case 'L':
+						Lflag = 1;
+						break;
+					case 's':
+						sflag = 1;
+						break;
+					case 'S':
+						Sflag = 1;
+						if (Cflag)
+            					  fprintf(stderr, "soapcpp2: using both options -C and -S omits client/server code\n");
+						break;
+					case 'T':
+						Tflag = 1;
+						break;
+					case 't':
+						tflag = 1;
+						break;
+					case 'u':
+						uflag = 1;
+						break;
+					case 'w':
+						wflag = 1;
+						break;
+					case 'x':
+						xflag = 1;
+						break;
+					case 'y':
+						yflag = 1;
+						break;
+					case 'p':
+						a++;
+						g = 0;
+						if (*a)
+							prefix = ns_cname(a, NULL);
+						else if (i < argc && argv[++i])
+							prefix = ns_cname(argv[i], NULL);
+						else
+							execerror("Option -p requires an output file name prefix");
+						break;
+					case 'Q':
+						Qflag = 1;
+						/* fall through */
+					case 'q':
+						a++;
+						g = 0;
+						if (*a)
+							namespaceid = ns_cname(a, NULL);
+						else if (i < argc && argv[++i])
+							namespaceid = ns_cname(argv[i], NULL);
+						else
+							execerror("Option -q requires a namespace name");
+						break;
+					case '0':
+						vflag = -1;
+						break;
+					case '1':
+						vflag = 1;
+						envURI = "http://schemas.xmlsoap.org/soap/envelope/";
+						encURI = "http://schemas.xmlsoap.org/soap/encoding/";
+						break;
+					case '2':
+						vflag = 2;
+						envURI = "http://www.w3.org/2003/05/soap-envelope";
+						encURI = "http://www.w3.org/2003/05/soap-encoding";
+						rpcURI = "http://www.w3.org/2003/05/soap-rpc";
+						break;
+					case 'v':
+						stop_flag = 1;
+						break;
+					case 'z':
+						a++;
+						g = 0;
+						if (*a)
+							zflag = *a - '0';
+						else if (i < argc && argv[++i])
+							zflag = *argv[i] - '0';
+						else
+							execerror("Option -z requires a digit");
+						break;
+					default:
+            					fprintf(stderr, "soapcpp2: Unknown option %s\n", a);
+            					exit(1);
+				}
+		}
+		else if (!(yyin = fopen(argv[i], "r")))
+		{	sprintf(errbuf, "Cannot open file \"%s\" for reading", argv[i]);
+			execerror(errbuf);
+		}
+		else
+			strcpy(filename, argv[i]);
+	}
+	fprintf(fmsg, "\n**  The gSOAP code generator for C and C++, soapcpp2 release "VERSION"\n**  Copyright (C) 2000-2013, Robert van Engelen, Genivia Inc.\n**  All Rights Reserved. This product is provided \"as is\", without any warranty.\n**  The soapcpp2 tool is released under one of the following licenses:\n**  GPL or the commercial license by Genivia Inc.\n\n");
+	if (stop_flag)
+	  exit(0);
+	init();
+	if (yyparse())
+		synerror("skipping the remaining part of the input");
+	return errstat();
+}