soup协议中的soap结构体
struct SOAP_STD_API soap { short state; /* 0 = uninitialized, 1 = initialized, 2 = copy of another soap struct */ short version; /* 1 = SOAP1.1 and 2 = SOAP1.2 (set automatically from namespace URI in nsmap table) */ soap_mode mode; soap_mode imode; soap_mode omode; const char *float_format; /* user-definable format string for floats (<1024 chars) */ const char *double_format; /* user-definable format string for doubles (<1024 chars) */ const char *dime_id_format; /* user-definable format string for integer DIME id (<SOAP_TAGLEN chars) */ const char *http_version; /* HTTP version used "1.0" or "1.1" */ const char *http_content; /* optional custom response content type (with SOAP_FILE) */ const char *encodingStyle; /* default = NULL which means that SOAP encoding is used */ const char *actor; /* SOAP-ENV:actor or role attribute value */ const char *lang; /* xml:lang attribute value of SOAP-ENV:Text */ int recv_timeout; /* when > 0, gives socket recv timeout in seconds, < 0 in usec */ int send_timeout; /* when > 0, gives socket send timeout in seconds, < 0 in usec */ int connect_timeout; /* when > 0, gives socket connect() timeout in seconds, < 0 in usec */ int accept_timeout; /* when > 0, gives socket accept() timeout in seconds, < 0 in usec */ int socket_flags; /* socket recv() and send() flags, e.g. set to MSG_NOSIGNAL to disable sigpipe */ int connect_flags; /* connect() SOL_SOCKET sockopt flags, e.g. set to SO_DEBUG to debug socket */ int bind_flags; /* bind() SOL_SOCKET sockopt flags, e.g. set to SO_REUSEADDR to enable reuse */ int accept_flags; /* accept() SOL_SOCKET sockopt flags */ unsigned short linger_time; /* linger time for SO_LINGER option */ const struct Namespace *namespaces; /* Pointer to global namespace mapping table */ struct Namespace *local_namespaces; /* Local namespace mapping table */ struct soap_nlist *nlist; /* namespace stack */ struct soap_blist *blist; /* block allocation stack */ struct soap_clist *clist; /* class instance allocation list */ void *alist; /* memory allocation (malloc) list */ struct soap_ilist *iht[SOAP_IDHASH]; struct soap_plist *pht[SOAP_PTRHASH]; struct soap_pblk *pblk; /* plist block allocation */ short pidx; /* plist block allocation */ struct SOAP_ENV__Header *header; struct SOAP_ENV__Fault *fault; int idnum; void *user; /* to pass user-defined data */ struct soap_plugin *plugins; /* linked list of plug-in data */ char *userid; /* HTTP Basic authorization userid */ char *passwd; /* HTTP Basic authorization passwd */ int (*fpost)(struct soap*, const char*, const char*, int, const char*, const char*, size_t); int (*fget)(struct soap*); int (*fput)(struct soap*); int (*fdel)(struct soap*); int (*fhead)(struct soap*); int (*fform)(struct soap*); int (*fposthdr)(struct soap*, const char*, const char*); int (*fresponse)(struct soap*, int, size_t); int (*fparse)(struct soap*); int (*fparsehdr)(struct soap*, const char*, const char*); int (*fheader)(struct soap*); int (*fresolve)(struct soap*, const char*, struct in_addr* inaddr); int (*fconnect)(struct soap*, const char*, const char*, int); int (*fdisconnect)(struct soap*); int (*fclosesocket)(struct soap*, SOAP_SOCKET); int (*fshutdownsocket)(struct soap*, SOAP_SOCKET, int); SOAP_SOCKET (*fopen)(struct soap*, const char*, const char*, int); SOAP_SOCKET (*faccept)(struct soap*, SOAP_SOCKET, struct sockaddr*, int *n); int (*fclose)(struct soap*); int (*fsend)(struct soap*, const char*, size_t); size_t (*frecv)(struct soap*, char*, size_t); int (*fpoll)(struct soap*); void (*fseterror)(struct soap*, const char **c, const char **s); int (*fignore)(struct soap*, const char*); int (*fserveloop)(struct soap*); void *(*fplugin)(struct soap*, const char*); void *(*fmalloc)(struct soap*, size_t); #ifndef WITH_LEANER int (*fprepareinit)(struct soap*); int (*fpreparesend)(struct soap*, const char*, size_t); int (*fpreparerecv)(struct soap*, const char*, size_t); int (*fpreparefinal)(struct soap*); void *(*fdimereadopen)(struct soap*, void*, const char*, const char*, const char*); void *(*fdimewriteopen)(struct soap*, const char*, const char*, const char*); void (*fdimereadclose)(struct soap*, void*); void (*fdimewriteclose)(struct soap*, void*); size_t (*fdimeread)(struct soap*, void*, char*, size_t); int (*fdimewrite)(struct soap*, void*, const char*, size_t); void *(*fmimereadopen)(struct soap*, void*, const char*, const char*, const char*); void *(*fmimewriteopen)(struct soap*, void*, const char*, const char*, const char*, enum soap_mime_encoding); void (*fmimereadclose)(struct soap*, void*); void (*fmimewriteclose)(struct soap*, void*); size_t (*fmimeread)(struct soap*, void*, char*, size_t); int (*fmimewrite)(struct soap*, void*, const char*, size_t); #endif SOAP_SOCKET master; SOAP_SOCKET socket; #if defined(__cplusplus) && !defined(WITH_LEAN) && !defined(WITH_COMPAT) std::ostream *os; std::istream *is; #else void *os; /* preserve struct size */ void *is; /* preserve struct size */ #endif #ifndef UNDER_CE int sendfd; int recvfd; #else FILE *sendfd; FILE *recvfd; #endif size_t bufidx; /* index in soap.buf[] */ size_t buflen; /* length of soap.buf[] content */ soap_wchar ahead; /* parser lookahead */ short cdata; /* CDATA parser state */ short body; /* parsed XML element has a body or not */ unsigned int level; /* XML nesting level */ size_t count; /* message length counter */ size_t length; /* message length as set by HTTP header */ char *labbuf; /* look-aside buffer */ size_t lablen; /* look-aside buffer allocated length */ size_t labidx; /* look-aside buffer index to available part */ char buf[SOAP_BUFLEN];/* send and receive buffer */ char msgbuf[1024]; /* in/out buffer for HTTP/MIME headers >=1024 bytes */ char tmpbuf[1024]; /* in/out buffer for HTTP/MIME headers, simpleType values, element and attribute tag names, and DIME must be >=1024 bytes */ char tag[SOAP_TAGLEN]; char id[SOAP_TAGLEN]; char href[SOAP_TAGLEN]; char type[SOAP_TAGLEN]; char arrayType[SOAP_TAGLEN]; char arraySize[SOAP_TAGLEN]; char arrayOffset[SOAP_TAGLEN]; short other; short position; int positions[SOAP_MAXDIMS]; short root; struct soap_attribute *attributes; /* attribute list */ short encoding; /* when set, output encodingStyle */ short mustUnderstand; /* a mustUnderstand element was parsed or is output */ short null; /* parsed XML is xsi:nil */ short ns; /* when not set, output full xmlns bindings */ short part; /* parsing state */ short alloced; short peeked; size_t chunksize; size_t chunkbuflen; char endpoint[SOAP_TAGLEN]; char path[SOAP_TAGLEN]; char host[SOAP_TAGLEN]; char *action; char *authrealm; /* HTTP authentication realm */ char *prolog; /* XML declaration prolog */ unsigned long ip; /* IP number */ int port; /* port number */ short keep_alive; /* connection should be kept open */ short tcp_keep_alive; /* enable SO_KEEPALIVE */ unsigned int tcp_keep_idle; /* set TCP_KEEPIDLE */ unsigned int tcp_keep_intvl; /* set TCP_KEEPINTVL */ unsigned int tcp_keep_cnt; /* set TCP_KEEPCNT */ unsigned int max_keep_alive; /* maximum keep-alive session (default=100) */ const char *proxy_http_version;/* HTTP version of proxy "1.0" or "1.1" */ const char *proxy_host; /* Proxy Server host name */ int proxy_port; /* Proxy Server port (default = 8080) */ const char *proxy_userid; /* Proxy Authorization user name */ const char *proxy_passwd; /* Proxy Authorization password */ const char *proxy_from; /* X-Forwarding-For header returned by proxy */ int status; /* -1 when request, else error code to be returned by server */ int error; int errmode; int errnum; #ifndef WITH_LEANER struct soap_dom_element *dom; struct soap_dime dime; struct soap_mime mime; struct soap_xlist *xlist; #endif #if !defined(WITH_LEAN) || defined(SOAP_DEBUG) const char *logfile[SOAP_MAXLOGS]; FILE *fdebug[SOAP_MAXLOGS]; struct soap_mlist *mht[SOAP_PTRHASH]; #endif #ifndef WITH_LEAN const char *c14ninclude; const char *c14nexclude; struct soap_cookie *cookies; const char *cookie_domain; const char *cookie_path; int cookie_max; #endif #ifndef WITH_NOIO int ipv6_multicast_if; /* always include this to keep the soap struct size the same in v4 and v6 */ char* ipv4_multicast_if; /* always include this to keep the soap struct size the same in v4 and v6 */ int ipv4_multicast_ttl; /* multicast scope */ #ifdef WITH_IPV6 struct sockaddr_storage peer; /* IPv6: set by soap_accept and by UDP recv */ #else struct sockaddr_in peer; /* IPv4: set by soap_connect/soap_accept and by UDP recv */ #endif #endif size_t peerlen; #ifdef WITH_OPENSSL int (*fsslauth)(struct soap*); int (*fsslverify)(int, X509_STORE_CTX*); BIO *bio; SSL *ssl; SSL_CTX *ctx; SSL_SESSION *session; #else void *fsslauth; /* dummy members, to preserve struct size */ void *fsslverify; void *bio; void *ssl; void *ctx; void *session; #endif unsigned short ssl_flags; const char *keyfile; const char *password; const char *dhfile; const char *cafile; const char *capath; const char *crlfile; const char *randfile; char session_host[SOAP_TAGLEN]; int session_port; #ifdef WITH_C_LOCALE locale_t c_locale; /* set to C locale by default */ #else void *c_locale; #endif #ifdef WITH_ZLIB z_stream *d_stream; /* decompression stream */ uLong z_crc; /* internal gzip crc */ #else void *d_stream; /* dummy members, to preserve struct size */ soap_int32 z_crc; #endif short zlib_state; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_INFLATE */ short zlib_in; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */ short zlib_out; /* SOAP_ZLIB_NONE, SOAP_ZLIB_DEFLATE, or SOAP_ZLIB_GZIP */ char *z_buf; /* buffer */ size_t z_buflen; unsigned short z_level; /* compression level to be used (0=none, 1=fast to 9=best) */ float z_ratio_in; /* detected compression ratio compressed_length/length of inbound message */ float z_ratio_out; /* detected compression ratio compressed_length/length of outbound message */ #ifdef WMW_RPM_IO void *rpmreqid; #endif #ifdef __cplusplus soap(); soap(soap_mode); soap(soap_mode, soap_mode); soap(struct soap&); virtual ~soap(); #else void (*dummy)(); #endif };