/** Interface between the apache http - server (http://httpd.apache.org) and the gsoap SOAP stack (http://www.cs.fsu.edu/~engelen/soap.html) * @file apache_gsoap.h */ #ifndef _APACHE_GSOAP_H_INCLUDED #define _APACHE_GSOAP_H_INCLUDED /* * need to include httpd.h for request rec definition */ # ifdef __NO_HTTPD_H__ typedef void * request_rec; # else #include # endif #ifdef __cplusplus extern "C" { #endif char *(*get_http_header)(char *) = NULL; #define APACHE_GSOAP_INTERFACE_VERSION 6 #define APACHE_HTTPSERVER_ENTRY_POINT "APACHE_INIT_SOAP_INTERFACE" /* * calls soap_serve inside shared library */ typedef SOAP_FMAC1 void (SOAP_FMAC2 * apache_soap_init_fn) (struct soap *, request_rec *); /* * calls soap_init inside shared library */ typedef SOAP_FMAC1 int (SOAP_FMAC2 * apache_soap_serve_fn) (struct soap *, request_rec *); /* * calls soap_destroy inside shared library */ typedef SOAP_FMAC1 void (SOAP_FMAC2 * apache_soap_destroy_fn) (struct soap *, request_rec *); /* * calls soap_end inside shared library */ typedef SOAP_FMAC1 void (SOAP_FMAC2 * apache_soap_end_fn) (struct soap *, request_rec *); /* * calls soap_done inside shared library */ typedef SOAP_FMAC1 void (SOAP_FMAC2 * apache_soap_done_fn) (struct soap *, request_rec *); typedef SOAP_FMAC1 int (SOAP_FMAC2 * apache_soap_register_plugin_fn) (struct soap *, int (*fcreate) (struct soap *, struct soap_plugin *, void *), void *arg, request_rec *); typedef SOAP_FMAC1 void *SOAP_FMAC2(*apache_soap_lookup_plugin_fn) (struct soap *, const char *, request_rec *); /* * the callbacks normally used in the apache_soap_interface */ # ifndef __vms SOAP_FMAC1 void SOAP_FMAC2 apache_soap_soap_destroy(struct soap *, request_rec * r); SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_init(struct soap *soap, request_rec * r); SOAP_FMAC1 int SOAP_FMAC2 apache_default_soap_serve(struct soap *soap, request_rec * r); SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_end(struct soap *soap, request_rec * r); SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_done(struct soap *soap, request_rec * r); SOAP_FMAC1 int SOAP_FMAC2 apache_default_soap_register_plugin_arg(struct soap *, int (*fcreate) (struct soap *, struct soap_plugin *, void *), void *arg, request_rec * r); SOAP_FMAC1 void *SOAP_FMAC2 apache_default_soap_lookup_plugin(struct soap *soap, const char *plugin, request_rec * r); # endif struct apache_soap_interface { unsigned int len; ///< length of this struct in bytes (for version control). unsigned int interface_version; apache_soap_init_fn fsoap_init; apache_soap_serve_fn fsoap_serve; apache_soap_destroy_fn fsoap_destroy; apache_soap_end_fn fsoap_end; apache_soap_done_fn fsoap_done; apache_soap_register_plugin_fn fsoap_register_plugin_arg; apache_soap_lookup_plugin_fn fsoap_lookup_plugin; void *reserved; ///< variable reserved for apache module, must not be changed by server shared library. struct Namespace *namespaces; void (*soap_serializeheader) (struct soap * soap); int (*soap_putheader) (struct soap * soap); int (*soap_getheader) (struct soap * soap); void (*soap_fault) (struct soap * soap); void (*soap_serializefault) (struct soap * soap); int (*soap_putfault) (struct soap * soap); int (*soap_getfault) (struct soap * soap); const char **(*soap_faultcode) (struct soap * soap); const char **(*soap_faultstring) (struct soap * soap); const char **(*soap_faultdetail) (struct soap * soap); void (*soap_markelement) (struct soap *, const void *, int); int (*soap_putelement) (struct soap *, const void *, const char *, int, int); void *(*soap_getelement) (struct soap *, int *); char *(*get_http_header) (char *); }; typedef void (*apache_init_soap_interface_fn) (struct apache_soap_interface *, request_rec *); /* * exported shared library function called by mod_gsoap from within apache http server * * This function fills the members of the apache_soap_interface struct. */ SOAP_FMAC1 void SOAP_FMAC2 APACHE_INIT_SOAP_INTERFACE(struct apache_soap_interface *, request_rec * r); #define IMPLEMENT_GSOAP_SERVER() \ static SOAP_FMAC1 void SOAP_FMAC2 apache_soap_soap_destroy(struct soap *soap, request_rec *r) {soap_destroy(soap);}\ static SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_init(struct soap *soap, request_rec *r) {soap_init(soap);}\ static SOAP_FMAC1 int SOAP_FMAC2 apache_default_soap_serve(struct soap *soap, request_rec *r) {return soap_serve(soap);}\ static SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_end(struct soap *soap, request_rec *r) {soap_end(soap);}\ static SOAP_FMAC1 void SOAP_FMAC2 apache_default_soap_done(struct soap *soap, request_rec *r) {soap_done(soap);}\ static SOAP_FMAC1 int SOAP_FMAC2 apache_default_soap_register_plugin_arg(struct soap *soap, int (*fcreate)(struct soap *, struct soap_plugin *, void *), void *arg, request_rec *r){return soap_register_plugin_arg(soap, fcreate, arg);}\ static SOAP_FMAC1 void* SOAP_FMAC2 apache_default_soap_lookup_plugin(struct soap *soap, const char *plugin, request_rec *r) {return soap_lookup_plugin(soap, plugin);}\ void APACHE_INIT_SOAP_INTERFACE(struct apache_soap_interface *pInt, request_rec *r) {\ pInt->len = sizeof(struct apache_soap_interface);\ pInt->interface_version = APACHE_GSOAP_INTERFACE_VERSION;\ pInt->fsoap_init = apache_default_soap_init; \ pInt->fsoap_serve = apache_default_soap_serve;\ pInt->fsoap_destroy = apache_soap_soap_destroy;\ pInt->fsoap_end = apache_default_soap_end;\ pInt->fsoap_done = apache_default_soap_done;\ pInt->fsoap_register_plugin_arg = apache_default_soap_register_plugin_arg;\ pInt->fsoap_lookup_plugin = apache_default_soap_lookup_plugin;\ pInt->reserved = 0;\ pInt->namespaces = namespaces;\ pInt->soap_serializeheader = soap_serializeheader;\ pInt->soap_putheader = soap_putheader;\ pInt->soap_getheader = soap_getheader;\ pInt->soap_fault = soap_fault;\ pInt->soap_serializefault = soap_serializefault;\ pInt->soap_putfault = soap_putfault;\ pInt->soap_getfault = soap_getfault;\ pInt->soap_faultcode = soap_faultcode;\ pInt->soap_faultstring = soap_faultstring;\ pInt->soap_faultdetail = soap_faultdetail;\ pInt->soap_markelement = soap_markelement;\ pInt->soap_getelement = soap_getelement;\ pInt->soap_putelement = soap_putelement;\ get_http_header = pInt->get_http_header;\ } #ifdef __cplusplus } #endif //__cplusplus #endif //_APACHE_GSOAP_H_INCLUDED