1 /* 2 +----------------------------------------------------------------------+ 3 | Copyright (c) The PHP Group | 4 +----------------------------------------------------------------------+ 5 | This source file is subject to version 3.01 of the PHP license, | 6 | that is bundled with this package in the file LICENSE, and is | 7 | available through the world-wide-web at the following url: | 8 | https://www.php.net/license/3_01.txt | 9 | If you did not receive a copy of the PHP license and are unable to | 10 | obtain it through the world-wide-web, please send a note to | 11 | license@php.net so we can mail you a copy immediately. | 12 +----------------------------------------------------------------------+ 13 | Authors: Brad Lafountain <rodif_bl@yahoo.com> | 14 | Shane Caraveo <shane@caraveo.com> | 15 | Dmitry Stogov <dmitry@php.net> | 16 +----------------------------------------------------------------------+ 17 */ 18 19 #ifndef PHP_SDL_H 20 #define PHP_SDL_H 21 22 #define XSD_WHITESPACE_COLLAPSE 1 23 #define XSD_WHITESPACE_PRESERVE 1 24 #define XSD_WHITESPACE_REPLACE 1 25 26 typedef enum _sdlBindingType { 27 BINDING_SOAP = 1, 28 BINDING_HTTP = 2 29 } sdlBindingType; 30 31 typedef enum _sdlEncodingStyle { 32 SOAP_RPC = 1, 33 SOAP_DOCUMENT = 2 34 } sdlEncodingStyle; 35 36 typedef enum _sdlRpcEncodingStyle { 37 SOAP_ENCODING_DEFAULT = 0, 38 SOAP_ENCODING_1_1 = 1, 39 SOAP_ENCODING_1_2 = 2 40 } sdlRpcEncodingStyle; 41 42 typedef enum _sdlEncodingUse { 43 SOAP_ENCODED = 1, 44 SOAP_LITERAL = 2 45 } sdlEncodingUse; 46 47 typedef enum _sdlTransport { 48 SOAP_TRANSPORT_HTTP = 1 49 } sdlTransport; 50 51 struct _sdl { 52 HashTable functions; /* array of sdlFunction */ 53 HashTable *types; /* array of sdlTypesPtr */ 54 HashTable *elements; /* array of sdlTypesPtr */ 55 HashTable *encoders; /* array of encodePtr */ 56 HashTable *bindings; /* array of sdlBindings (key'd by name) */ 57 HashTable *requests; /* array of sdlFunction (references) */ 58 HashTable *groups; /* array of sdlTypesPtr */ 59 char *target_ns; 60 char *source; 61 bool is_persistent; 62 }; 63 64 typedef struct sdlCtx { 65 sdlPtr sdl; 66 67 HashTable docs; /* array of xmlDocPtr */ 68 69 HashTable messages; /* array of xmlNodePtr */ 70 HashTable bindings; /* array of xmlNodePtr */ 71 HashTable portTypes; /* array of xmlNodePtr */ 72 HashTable services; /* array of xmlNodePtr */ 73 74 HashTable *attributes; /* array of sdlAttributePtr */ 75 HashTable *attributeGroups; /* array of sdlTypesPtr */ 76 php_stream_context *context; 77 zval old_header; 78 } sdlCtx; 79 80 struct _sdlBinding { 81 char *name; 82 char *location; 83 sdlBindingType bindingType; 84 void *bindingAttributes; /* sdlSoapBindingPtr */ 85 }; 86 87 /* Soap Binding Specific stuff */ 88 struct _sdlSoapBinding { 89 sdlEncodingStyle style; 90 sdlTransport transport; /* not implemented yet */ 91 }; 92 93 typedef struct _sdlSoapBindingFunctionHeader { 94 char *name; 95 char *ns; 96 sdlEncodingUse use; 97 sdlTypePtr element; 98 encodePtr encode; 99 sdlRpcEncodingStyle encodingStyle; /* not implemented yet */ 100 HashTable *headerfaults; /* array of sdlSoapBindingFunctionHeaderPtr */ 101 } sdlSoapBindingFunctionHeader, *sdlSoapBindingFunctionHeaderPtr; 102 103 typedef struct _sdlSoapBindingFunctionFault { 104 char *ns; 105 sdlEncodingUse use; 106 sdlRpcEncodingStyle encodingStyle; /* not implemented yet */ 107 } sdlSoapBindingFunctionFault, *sdlSoapBindingFunctionFaultPtr; 108 109 struct _sdlSoapBindingFunctionBody { 110 char *ns; 111 sdlEncodingUse use; 112 sdlRpcEncodingStyle encodingStyle; /* not implemented yet */ 113 HashTable *headers; /* array of sdlSoapBindingFunctionHeaderPtr */ 114 }; 115 116 struct _sdlSoapBindingFunction { 117 char *soapAction; 118 sdlEncodingStyle style; 119 120 sdlSoapBindingFunctionBody input; 121 sdlSoapBindingFunctionBody output; 122 }; 123 124 struct _sdlRestrictionInt { 125 int value; 126 char fixed; 127 }; 128 129 struct _sdlRestrictionChar { 130 char *value; 131 char fixed; 132 }; 133 134 struct _sdlRestrictions { 135 HashTable *enumeration; /* array of sdlRestrictionCharPtr */ 136 sdlRestrictionIntPtr minExclusive; 137 sdlRestrictionIntPtr minInclusive; 138 sdlRestrictionIntPtr maxExclusive; 139 sdlRestrictionIntPtr maxInclusive; 140 sdlRestrictionIntPtr totalDigits; 141 sdlRestrictionIntPtr fractionDigits; 142 sdlRestrictionIntPtr length; 143 sdlRestrictionIntPtr minLength; 144 sdlRestrictionIntPtr maxLength; 145 sdlRestrictionCharPtr whiteSpace; 146 sdlRestrictionCharPtr pattern; 147 }; 148 149 typedef enum _sdlContentKind { 150 XSD_CONTENT_ELEMENT, 151 XSD_CONTENT_SEQUENCE, 152 XSD_CONTENT_ALL, 153 XSD_CONTENT_CHOICE, 154 XSD_CONTENT_GROUP_REF, 155 XSD_CONTENT_GROUP, 156 XSD_CONTENT_ANY 157 } sdlContentKind; 158 159 160 typedef struct _sdlContentModel sdlContentModel, *sdlContentModelPtr; 161 162 struct _sdlContentModel { 163 sdlContentKind kind; 164 int min_occurs; 165 int max_occurs; 166 union { 167 sdlTypePtr element; /* pointer to element */ 168 sdlTypePtr group; /* pointer to group */ 169 HashTable *content; /* array of sdlContentModel for sequnce,all,choice*/ 170 char *group_ref; /* reference to group */ 171 } u; 172 }; 173 174 typedef enum _sdlTypeKind { 175 XSD_TYPEKIND_SIMPLE, 176 XSD_TYPEKIND_LIST, 177 XSD_TYPEKIND_UNION, 178 XSD_TYPEKIND_COMPLEX, 179 XSD_TYPEKIND_RESTRICTION, 180 XSD_TYPEKIND_EXTENSION 181 } sdlTypeKind; 182 183 typedef enum _sdlUse { 184 XSD_USE_DEFAULT, 185 XSD_USE_OPTIONAL, 186 XSD_USE_PROHIBITED, 187 XSD_USE_REQUIRED 188 } sdlUse; 189 190 typedef enum _sdlForm { 191 XSD_FORM_DEFAULT, 192 XSD_FORM_QUALIFIED, 193 XSD_FORM_UNQUALIFIED 194 } sdlForm; 195 196 struct _sdlType { 197 sdlTypeKind kind; 198 char *name; 199 char *namens; 200 char nillable; 201 HashTable *elements; /* array of sdlTypePtr */ 202 HashTable *attributes; /* array of sdlAttributePtr */ 203 sdlRestrictionsPtr restrictions; 204 encodePtr encode; 205 sdlContentModelPtr model; 206 char *def; 207 char *fixed; 208 char *ref; 209 sdlForm form; 210 }; 211 212 struct _sdlParam { 213 int order; 214 sdlTypePtr element; 215 encodePtr encode; 216 char *paramName; 217 }; 218 219 typedef struct _sdlFault { 220 char *name; 221 HashTable *details; /* array of sdlParamPtr */ 222 void *bindingAttributes; /* sdlSoapBindingFunctionFaultPtr */ 223 } sdlFault, *sdlFaultPtr; 224 225 struct _sdlFunction { 226 char *functionName; 227 char *requestName; 228 char *responseName; 229 HashTable *requestParameters; /* array of sdlParamPtr */ 230 HashTable *responseParameters; /* array of sdlParamPtr (this should only be one) */ 231 struct _sdlBinding *binding; 232 void *bindingAttributes; /* sdlSoapBindingFunctionPtr */ 233 HashTable *faults; /* array of sdlFaultPtr */ 234 }; 235 236 typedef struct _sdlExtraAttribute { 237 char *ns; 238 char *val; 239 } sdlExtraAttribute, *sdlExtraAttributePtr; 240 241 struct _sdlAttribute { 242 char *name; 243 char *namens; 244 char *ref; 245 char *def; 246 char *fixed; 247 sdlForm form; 248 sdlUse use; 249 HashTable *extraAttributes; /* array of sdlExtraAttribute */ 250 encodePtr encode; 251 }; 252 253 254 sdlPtr get_sdl(zval *this_ptr, char *uri, zend_long cache_wsdl); 255 256 encodePtr get_encoder_from_prefix(sdlPtr sdl, xmlNodePtr data, const xmlChar *type); 257 encodePtr get_encoder(sdlPtr sdl, const char *ns, const char *type); 258 encodePtr get_encoder_ex(sdlPtr sdl, const char *nscat, int len); 259 260 sdlBindingPtr get_binding_from_type(sdlPtr sdl, sdlBindingType type); 261 sdlBindingPtr get_binding_from_name(sdlPtr sdl, char *name, char *ns); 262 263 void delete_sdl(void *handle); 264 void delete_sdl_impl(void *handle); 265 266 void sdl_set_uri_credentials(sdlCtx *ctx, char *uri); 267 void sdl_restore_uri_credentials(sdlCtx *ctx); 268 269 #endif 270