Mercurial > repos > ktnyt > gembassy
comparison GEMBASSY-1.0.3/gsoap/src/soapcpp2.h @ 2:8947fca5f715 draft default tip
Uploaded
| author | ktnyt |
|---|---|
| date | Fri, 26 Jun 2015 05:21:44 -0400 |
| parents | 84a17b3fad1f |
| children |
comparison
equal
deleted
inserted
replaced
| 1:84a17b3fad1f | 2:8947fca5f715 |
|---|---|
| 1 /* | |
| 2 soapcpp2.h | |
| 3 | |
| 4 Common declarations. | |
| 5 | |
| 6 -------------------------------------------------------------------------------- | |
| 7 gSOAP XML Web services tools | |
| 8 Copyright (C) 2000-2012, Robert van Engelen, Genivia Inc. All Rights Reserved. | |
| 9 This part of the software is released under one of the following licenses: | |
| 10 GPL or Genivia's license for commercial use. | |
| 11 -------------------------------------------------------------------------------- | |
| 12 GPL license. | |
| 13 | |
| 14 This program is free software; you can redistribute it and/or modify it under | |
| 15 the terms of the GNU General Public License as published by the Free Software | |
| 16 Foundation; either version 2 of the License, or (at your option) any later | |
| 17 version. | |
| 18 | |
| 19 This program is distributed in the hope that it will be useful, but WITHOUT ANY | |
| 20 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A | |
| 21 PARTICULAR PURPOSE. See the GNU General Public License for more details. | |
| 22 | |
| 23 You should have received a copy of the GNU General Public License along with | |
| 24 this program; if not, write to the Free Software Foundation, Inc., 59 Temple | |
| 25 Place, Suite 330, Boston, MA 02111-1307 USA | |
| 26 | |
| 27 Author contact information: | |
| 28 engelen@genivia.com / engelen@acm.org | |
| 29 | |
| 30 This program is released under the GPL with the additional exemption that | |
| 31 compiling, linking, and/or using OpenSSL is allowed. | |
| 32 -------------------------------------------------------------------------------- | |
| 33 A commercial use license is available from Genivia, Inc., contact@genivia.com | |
| 34 -------------------------------------------------------------------------------- | |
| 35 */ | |
| 36 | |
| 37 #include <stdio.h> | |
| 38 #include <stdlib.h> | |
| 39 #include <errno.h> | |
| 40 #include <string.h> | |
| 41 #include <ctype.h> | |
| 42 #include <time.h> | |
| 43 #include "error2.h" | |
| 44 | |
| 45 #ifndef VERSION | |
| 46 # define VERSION "2.8.17r" /* Current version */ | |
| 47 # define GSOAP_VERSION 20817 | |
| 48 #endif | |
| 49 | |
| 50 #ifdef WIN32 | |
| 51 # pragma warning(disable : 4996) | |
| 52 # ifndef WITH_BISON | |
| 53 # define WITH_BISON | |
| 54 # endif | |
| 55 #endif | |
| 56 | |
| 57 /* #define DEBUG */ /* uncomment to debug */ | |
| 58 | |
| 59 #ifdef DEBUG | |
| 60 # define check(expr, msg) (void)((expr) ? 0 : (progerror(msg, __FILE__, __LINE__), 0)) | |
| 61 # define DBGLOG(DBGCMD) { DBGCMD; } | |
| 62 #else | |
| 63 # define check(expr, msg) (void)(expr) | |
| 64 # define DBGLOG(DBGCMD) | |
| 65 #endif | |
| 66 | |
| 67 #ifdef WIN32 | |
| 68 # ifdef WITH_BISON | |
| 69 # ifdef WIN32_WITHOUT_SOLARIS_FLEX | |
| 70 # define yyparse soapcpp2parse | |
| 71 # define yylex soapcpp2lex | |
| 72 # define yyerror soapcpp2error | |
| 73 # define yylval soapcpp2lval | |
| 74 # define yychar soapcpp2char | |
| 75 # define yydebug soapcpp2debug | |
| 76 # define yynerrs soapcpp2nerrs | |
| 77 # define yylineno soapcpp2lineno | |
| 78 # define yytext soapcpp2text | |
| 79 # define yyin soapcpp2in | |
| 80 # define yywrap soapcpp2wrap | |
| 81 # endif | |
| 82 # endif | |
| 83 #endif | |
| 84 | |
| 85 #ifdef WIN32 | |
| 86 # define SOAP_PATHCAT "\\" | |
| 87 # define SOAP_PATHSEP ";" | |
| 88 # define LONG64 __int64 | |
| 89 #else | |
| 90 # define SOAP_PATHCAT "/" | |
| 91 # define SOAP_PATHSEP ":" | |
| 92 # define LONG64 long long | |
| 93 #endif | |
| 94 | |
| 95 #if defined(WIN32) | |
| 96 # define SOAP_LONG_FORMAT "%I64d" | |
| 97 # define SOAP_ULONG_FORMAT "%I64u" | |
| 98 # define SOAP_XLONG_FORMAT "%I64x" | |
| 99 #elif defined(TRU64) | |
| 100 # define SOAP_LONG_FORMAT "%ld" | |
| 101 # define SOAP_ULONG_FORMAT "%lu" | |
| 102 # define SOAP_XLONG_FORMAT "%lx" | |
| 103 #endif | |
| 104 | |
| 105 #ifndef SOAP_LONG_FORMAT | |
| 106 # define SOAP_LONG_FORMAT "%lld" /* printf format for 64 bit ints */ | |
| 107 #endif | |
| 108 #ifndef SOAP_ULONG_FORMAT | |
| 109 # define SOAP_ULONG_FORMAT "%llu" /* printf format for unsigned 64 bit ints */ | |
| 110 #endif | |
| 111 #ifndef SOAP_XLONG_FORMAT | |
| 112 # define SOAP_XLONG_FORMAT "%llx" /* printf format for unsigned 64 bit hex ints */ | |
| 113 #endif | |
| 114 | |
| 115 extern int yylineno; | |
| 116 | |
| 117 typedef enum Bool {False, True} Bool; | |
| 118 | |
| 119 typedef int Token; | |
| 120 | |
| 121 typedef enum Type | |
| 122 { Tnone, | |
| 123 Tvoid, /* primitive types */ | |
| 124 Tchar, | |
| 125 Twchar, | |
| 126 Tshort, | |
| 127 Tint, | |
| 128 Tlong, | |
| 129 Tllong, | |
| 130 Tfloat, | |
| 131 Tdouble, | |
| 132 Tldouble, | |
| 133 Tuchar, | |
| 134 Tushort, | |
| 135 Tuint, | |
| 136 Tulong, | |
| 137 Tullong, | |
| 138 Ttime, | |
| 139 Tenum, | |
| 140 Tclass, /* compound types */ | |
| 141 Tstruct, | |
| 142 Tunion, | |
| 143 Tpointer, | |
| 144 Treference, | |
| 145 Tarray, | |
| 146 Ttemplate, | |
| 147 Tfun | |
| 148 } Type; | |
| 149 | |
| 150 #define TYPES (Tfun+1) /* number of type (operators) enumerated above */ | |
| 151 | |
| 152 typedef enum Storage | |
| 153 { Snone = 0, | |
| 154 Sauto = 0x000001, | |
| 155 Sregister = 0x000002, | |
| 156 Sstatic = 0x000004, | |
| 157 Sextern = 0x000008, | |
| 158 Stypedef = 0x000010, | |
| 159 Svirtual = 0x000020, | |
| 160 Sconst = 0x000040, | |
| 161 Sconstobj = 0x000080, | |
| 162 Sconstptr = 0x000100, | |
| 163 Sfriend = 0x000200, | |
| 164 Sinline = 0x000400, | |
| 165 Sabstract = 0x000800, | |
| 166 SmustUnderstand = 0x001000, | |
| 167 Sreturn = 0x002000, | |
| 168 Sattribute = 0x004000, | |
| 169 Sspecial = 0x008000, | |
| 170 Sexplicit = 0x010000, | |
| 171 Sprivate = 0x020000, | |
| 172 Sprotected = 0x040000 | |
| 173 } Storage; | |
| 174 | |
| 175 typedef enum Level { INTERNAL, GLOBAL, PARAM, LOCAL } Level; | |
| 176 | |
| 177 #define mknone() mktype(Tnone, NULL, 0) | |
| 178 #define mkvoid() mktype(Tvoid, NULL, 0) | |
| 179 #define mkbool() mktype(Tenum, booltable, 4) | |
| 180 #define mkchar() mktype(Tchar, NULL, 1) | |
| 181 #define mkwchart() mktype(Twchar, NULL, 4) | |
| 182 #define mkshort() mktype(Tshort, NULL, 2) | |
| 183 #define mkint() mktype(Tint, NULL, 4) | |
| 184 #define mklong() mktype(Tlong, NULL, 8) | |
| 185 #define mkllong() mktype(Tllong, NULL, 8) | |
| 186 #define mkfloat() mktype(Tfloat, NULL, 4) | |
| 187 #define mkdouble() mktype(Tdouble, NULL, 8) | |
| 188 #define mkldouble() mktype(Tldouble, NULL, 16) /* long double */ | |
| 189 #define mkuchar() mktype(Tuchar, NULL, 1) /* unsigned char */ | |
| 190 #define mkushort() mktype(Tushort, NULL, 2) /* unsigned short */ | |
| 191 #define mkuint() mktype(Tuint, NULL, 4) /* unsigned int */ | |
| 192 #define mkulong() mktype(Tulong, NULL, 8) /* unsigned long */ | |
| 193 #define mkullong() mktype(Tullong, NULL, 8) /* unsigned long */ | |
| 194 #define mktimet() mktype(Ttime, NULL, 4) | |
| 195 #define mkenum(t) mktype(Tenum, t, 4) | |
| 196 #define mkmask(t) mktype(Tenum, t, 8) | |
| 197 #define mkpointer(t) mktype(Tpointer, t, 4) | |
| 198 #define mkreference(t) mktype(Treference,t, 4) | |
| 199 #define mkclass(t, w) mktype(Tclass, t, w) | |
| 200 #define mkstruct(t, w) mktype(Tstruct, t, w) | |
| 201 #define mkunion(t, w) mktype(Tunion, t, w) | |
| 202 #define mkarray(t, w) mktype(Tarray, t, w) | |
| 203 #define mkfun(t) mktype(Tfun, t, 0) | |
| 204 #define mkstring() mkpointer(mkchar()) | |
| 205 | |
| 206 #define MINLONG64 (0x8000000000000000LL) | |
| 207 #define MAXLONG64 (0x7FFFFFFFFFFFFFFFLL) | |
| 208 | |
| 209 typedef struct Symbol | |
| 210 { char *name; | |
| 211 Token token; | |
| 212 struct Symbol *next; | |
| 213 } Symbol; | |
| 214 | |
| 215 Symbol *install(const char*, Token), *lookup(const char*), *gensym(const char*), *gensymidx(const char*, int); | |
| 216 | |
| 217 typedef struct Tnode | |
| 218 { Type type; | |
| 219 void *ref; | |
| 220 Symbol *id; /* struct/class/union/enum name */ | |
| 221 Symbol *base; /* base class name */ | |
| 222 Symbol *sym; /* typedef name */ | |
| 223 struct Entry *response; /* funcs only: points to response struct */ | |
| 224 int width; | |
| 225 int transient; | |
| 226 const char *imported; | |
| 227 struct Tnode *next; | |
| 228 Bool generated; | |
| 229 Bool classed; /* class qualified */ | |
| 230 Bool wsdl; | |
| 231 int num; | |
| 232 char *pattern; | |
| 233 LONG64 minLength; | |
| 234 LONG64 maxLength; | |
| 235 } Tnode; | |
| 236 | |
| 237 typedef union Value { | |
| 238 LONG64 i; | |
| 239 double r; | |
| 240 const char *s; | |
| 241 } Value; | |
| 242 | |
| 243 typedef struct IDinfo { | |
| 244 Tnode *typ; | |
| 245 Storage sto; | |
| 246 Bool hasval; /* if true, identifier is constant */ | |
| 247 Value val; /* ... with this value */ | |
| 248 int offset; | |
| 249 LONG64 minOccurs; | |
| 250 LONG64 maxOccurs; | |
| 251 } IDinfo; | |
| 252 | |
| 253 typedef struct Entry { | |
| 254 Symbol *sym; | |
| 255 char *tag; | |
| 256 IDinfo info; | |
| 257 Level level; | |
| 258 int lineno; | |
| 259 struct Entry *next; | |
| 260 } Entry; | |
| 261 | |
| 262 typedef struct Table { | |
| 263 Symbol *sym; | |
| 264 Level level; | |
| 265 Entry *list; | |
| 266 struct Table *prev; | |
| 267 } Table; | |
| 268 | |
| 269 typedef struct FNinfo { | |
| 270 Tnode *ret; | |
| 271 Table *args; | |
| 272 } FNinfo; | |
| 273 | |
| 274 typedef struct Node { | |
| 275 Tnode *typ; | |
| 276 Storage sto; | |
| 277 Bool hasval; /* if true, this node has a constant value */ | |
| 278 Value val; /* ... this is the value */ | |
| 279 LONG64 minOccurs; | |
| 280 LONG64 maxOccurs; | |
| 281 char *pattern; | |
| 282 LONG64 minLength; | |
| 283 LONG64 maxLength; | |
| 284 } Node; | |
| 285 | |
| 286 #define ACTION 0x0000 | |
| 287 #define REQUEST_ACTION 0x0001 | |
| 288 #define RESPONSE_ACTION 0x0002 | |
| 289 #define FAULT_ACTION 0x0004 | |
| 290 #define HDRIN 0x0010 | |
| 291 #define HDROUT 0x0020 | |
| 292 #define MIMEIN 0x0040 | |
| 293 #define MIMEOUT 0x0080 | |
| 294 #define COMMENT 0x0100 | |
| 295 #define ENCODING 0x0200 | |
| 296 #define RESPONSE_ENCODING 0x0400 | |
| 297 #define STYLE 0x0800 | |
| 298 #define FAULT 0x1000 | |
| 299 #define PROTOCOL 0x2000 | |
| 300 | |
| 301 typedef struct Data | |
| 302 { struct Data *next; | |
| 303 char *name; | |
| 304 char *text; | |
| 305 } Data; | |
| 306 | |
| 307 typedef struct Method | |
| 308 { struct Method *next; | |
| 309 char *name; | |
| 310 short mess; /* see #defines above */ | |
| 311 char *part; | |
| 312 } Method; | |
| 313 | |
| 314 typedef struct Service | |
| 315 { struct Service *next; | |
| 316 char *ns; | |
| 317 char *name; | |
| 318 char *porttype; | |
| 319 char *portname; | |
| 320 char *binding; | |
| 321 char *definitions; | |
| 322 char *transport; | |
| 323 char *URL; | |
| 324 char *executable; | |
| 325 char *import; | |
| 326 char *URI; | |
| 327 char *URI2; | |
| 328 char *WSDL; | |
| 329 char *style; | |
| 330 char *encoding; | |
| 331 char *protocol; | |
| 332 int xsi_type; | |
| 333 char *elementForm; | |
| 334 char *attributeForm; | |
| 335 char *documentation; | |
| 336 struct Method *list; | |
| 337 struct Data *data; | |
| 338 } Service; | |
| 339 | |
| 340 typedef struct Pragma | |
| 341 { struct Pragma *next; | |
| 342 char *pragma; | |
| 343 } Pragma; | |
| 344 | |
| 345 extern Entry *enter(Table*, Symbol*), *entry(Table*, Symbol*), *reenter(Table*, Symbol*), *enumentry(Symbol*); | |
| 346 | |
| 347 extern int merge(Table*, Table*); | |
| 348 | |
| 349 extern Table *mktable(Table*); | |
| 350 | |
| 351 extern Tnode *mkmethod(Tnode*, Table*); | |
| 352 | |
| 353 extern char *emalloc(size_t); | |
| 354 | |
| 355 extern Tnode *mktype(Type, void*, int); | |
| 356 extern Tnode *mksymtype(Tnode*, Symbol*); | |
| 357 extern Tnode *mktemplate(Tnode*, Symbol*); | |
| 358 | |
| 359 extern int is_transient(Tnode*); | |
| 360 extern int is_response(Tnode*); | |
| 361 | |
| 362 extern Table *typetable, *enumtable, *classtable, *booltable, *templatetable; | |
| 363 | |
| 364 extern void compile(Table*); | |
| 365 extern void freetable(Table*); | |
| 366 extern Entry *unlinklast(Table*); | |
| 367 | |
| 368 extern FILE *fmsg; | |
| 369 | |
| 370 extern int aflag; | |
| 371 extern int Aflag; | |
| 372 extern int bflag; | |
| 373 extern int vflag; | |
| 374 extern int wflag; | |
| 375 extern int cflag; | |
| 376 extern int Cflag; | |
| 377 extern int eflag; | |
| 378 extern unsigned long fflag; | |
| 379 extern int iflag; | |
| 380 extern int jflag; | |
| 381 extern int kflag; | |
| 382 extern int mflag; | |
| 383 extern int nflag; | |
| 384 extern int nflag; | |
| 385 extern int lflag; | |
| 386 extern int Lflag; | |
| 387 extern int Qflag; | |
| 388 extern int sflag; | |
| 389 extern int Sflag; | |
| 390 extern int Tflag; | |
| 391 extern int tflag; | |
| 392 extern int uflag; | |
| 393 extern int xflag; | |
| 394 extern int yflag; | |
| 395 extern int zflag; | |
| 396 extern char dirpath[1024]; | |
| 397 extern char filename[1024]; | |
| 398 extern char *prefix; | |
| 399 extern char *importpath; | |
| 400 extern int custom_header; | |
| 401 extern int custom_fault; | |
| 402 extern Pragma *pragmas; | |
| 403 extern Service *services; | |
| 404 extern char *namespaceid; | |
| 405 extern int transient; | |
| 406 extern int imports; | |
| 407 extern char *imported; | |
| 408 extern int typeNO; | |
| 409 | |
| 410 extern char *envURI; | |
| 411 extern char *encURI; | |
| 412 extern char *rpcURI; | |
| 413 extern char *xsiURI; | |
| 414 extern char *xsdURI; |
