1 /*
2 * Portions of this file Copyright 1999-2005 University of Chicago
3 * Portions of this file Copyright 1999-2005 The University of Southern California.
4 *
5 * This file or a portion of this file is licensed under the
6 * terms of the Globus Toolkit Public License, found at
7 * http://www.globus.org/toolkit/download/license.html.
8 * If you redistribute this file, with or without
9 * modifications, you must include this notice in the file.
10 */
11
12
13 #include "globus_common.h"
14 #include "version.h"
15 #include "libxml/xmlschemastypes.h"
16 #include "globus_xio.h"
17 #include "globus_xio_buffer.h"
18 #include "globus_i_soap_message.h"
19 #include "globus_soap_message_utils.h"
20 #include "globus_xsd_type_registry.h"
21
22 globus_xsd_type_registry_t GLOBUS_XSD_BASE_REGISTRY = NULL;
23 globus_xsd_type_registry_t GLOBUS_GLOBAL_TYPE_REGISTRY = NULL;
24
25 static int
26 globus_l_soap_message_activate();
27
28 static int
29 globus_l_soap_message_deactivate();
30
31 globus_module_descriptor_t
32 globus_i_soap_message_module =
33 {
34 "globus_soap_message_module",
35 globus_l_soap_message_activate,
36 globus_l_soap_message_deactivate,
37 NULL,
38 NULL,
39 &local_version
40 };
41
42 0 GlobusDebugDefine(GLOBUS_SOAP_MESSAGE);
43
44 globus_xio_stack_t globus_i_soap_message_xio_stack;
45 globus_xio_driver_t globus_i_soap_message_tcp_driver;
46 globus_xio_driver_t globus_i_soap_message_http_driver;
47 globus_xio_driver_t globus_i_soap_message_buffer_driver;
48
49 globus_xio_stack_t globus_i_soap_message_xio_file_stack;
50 globus_xio_driver_t globus_i_soap_message_file_driver;
51
52 globus_xio_stack_t globus_i_soap_message_xio_https_stack;
53 globus_xio_driver_t globus_i_soap_message_gsi_driver;
54
55
56 static int
57 globus_l_soap_message_activate()
58 148 {
59 148 globus_result_t result = GLOBUS_SUCCESS;
60 148 int rc = 0;
61 GlobusFuncName(globus_l_soap_message_activate);
62
63 148 globus_i_soap_message_xio_stack = NULL;
64 148 globus_i_soap_message_tcp_driver = NULL;
65 148 globus_i_soap_message_http_driver = NULL;
66 148 globus_i_soap_message_buffer_driver = NULL;
67
68 148 globus_i_soap_message_xio_file_stack = NULL;
69 148 globus_i_soap_message_file_driver = NULL;
70
71 148 globus_i_soap_message_xio_https_stack = NULL;
72 148 globus_i_soap_message_gsi_driver = NULL;
73
74 148 rc = globus_module_activate(GLOBUS_COMMON_MODULE);
75 148 if(rc != GLOBUS_SUCCESS)
76 {
77 0 return rc;
78 }
79
80 148 GlobusDebugInit(GLOBUS_SOAP_MESSAGE,
81 MESSAGES INFO DEBUG TRACE WARN REGISTRY WILDCARDS);
82 148 GlobusSoapMessageDebugEnter();
83
84 148 rc = globus_module_activate(GLOBUS_XIO_MODULE);
85 148 if(rc != GLOBUS_SUCCESS)
86 {
87 0 return rc;
88 }
89
90 148 result = globus_xio_stack_init(
91 &globus_i_soap_message_xio_stack, NULL);
92 148 if(result != GLOBUS_SUCCESS)
93 {
94 0 result = GlobusSoapMessageErrorFailedTransport(
95 result, "Failed xio stack initialization");
96 0 goto error;
97 }
98
99 148 result = globus_xio_driver_load(
100 "tcp", &globus_i_soap_message_tcp_driver);
101 148 if(result != GLOBUS_SUCCESS)
102 {
103 0 result = GlobusSoapMessageErrorFailedTransport(
104 result, "Failed to load tcp driver");
105 0 goto error;
106 }
107
108 148 result = globus_xio_stack_push_driver(
109 globus_i_soap_message_xio_stack, globus_i_soap_message_tcp_driver);
110 148 if(result != GLOBUS_SUCCESS)
111 {
112 0 result = GlobusSoapMessageErrorFailedTransport(
113 result, "Failed to push tcp driver onto stack");
114 0 goto error;
115 }
116
117 148 result = globus_xio_driver_load(
118 "http", &globus_i_soap_message_http_driver);
119 148 if(result != GLOBUS_SUCCESS)
120 {
121 0 result = GlobusSoapMessageErrorFailedTransport(
122 result, "Failed to load http driver");
123 0 goto error;
124 }
125
126 148 result = globus_xio_driver_load(
127 "buffer", &globus_i_soap_message_buffer_driver);
128 148 if(result != GLOBUS_SUCCESS)
129 {
130 0 result = GlobusSoapMessageErrorFailedTransport(
131 result, "Failed to load buffer driver");
132 0 goto error;
133 }
134
135 148 result = globus_xio_stack_push_driver(
136 globus_i_soap_message_xio_stack, globus_i_soap_message_http_driver);
137 148 if(result != GLOBUS_SUCCESS)
138 {
139 0 result = GlobusSoapMessageErrorFailedTransport(
140 result, "Failed to push http driver");
141 0 goto error;
142 }
143
144 148 result = globus_xio_stack_push_driver(
145 globus_i_soap_message_xio_stack, globus_i_soap_message_buffer_driver);
146 148 if(result != GLOBUS_SUCCESS)
147 {
148 0 result = GlobusSoapMessageErrorFailedTransport(
149 result, "Failed to push buffer driver");
150 0 goto error;
151 }
152
153 148 result = globus_xio_stack_init(
154 &globus_i_soap_message_xio_file_stack, NULL);
155 148 if(result != GLOBUS_SUCCESS)
156 {
157 0 result = GlobusSoapMessageErrorFailedTransport(
158 result, "Failed xio stack initialization");
159 0 goto error;
160 }
161
162 148 result = globus_xio_driver_load(
163 "file", &globus_i_soap_message_file_driver);
164 148 if(result != GLOBUS_SUCCESS)
165 {
166 0 result = GlobusSoapMessageErrorFailedTransport(
167 result, "Failed to load file driver");
168 0 goto error;
169 }
170
171 148 result = globus_xio_stack_push_driver(
172 globus_i_soap_message_xio_file_stack,
173 globus_i_soap_message_file_driver);
174 148 if(result != GLOBUS_SUCCESS)
175 {
176 0 result = GlobusSoapMessageErrorFailedTransport(
177 result, "Failed to push file driver onto stack");
178 0 goto error;
179 }
180
181 148 result = globus_xio_stack_init(
182 &globus_i_soap_message_xio_https_stack, NULL);
183 148 if(result != GLOBUS_SUCCESS)
184 {
185 0 result = GlobusSoapMessageErrorFailedTransport(
186 result, "Failed xio stack initialization");
187 0 goto error;
188 }
189
190 148 result = globus_xio_driver_load(
191 "gsi", &globus_i_soap_message_gsi_driver);
192 148 if(result != GLOBUS_SUCCESS)
193 {
194 0 result = GlobusSoapMessageErrorFailedTransport(
195 result, "Failed to load gsi driver");
196 0 goto error;
197 }
198
199 148 result = globus_xio_stack_push_driver(
200 globus_i_soap_message_xio_https_stack,
201 globus_i_soap_message_tcp_driver);
202 148 if(result != GLOBUS_SUCCESS)
203 {
204 0 result = GlobusSoapMessageErrorFailedTransport(
205 result, "Failed to push gsi driver onto stack");
206 0 goto error;
207 }
208
209 148 result = globus_xio_stack_push_driver(
210 globus_i_soap_message_xio_https_stack,
211 globus_i_soap_message_gsi_driver);
212 148 if(result != GLOBUS_SUCCESS)
213 {
214 0 result = GlobusSoapMessageErrorFailedTransport(
215 result, "Failed to push gsi driver onto stack");
216 0 goto error;
217 }
218
219 148 result = globus_xio_stack_push_driver(
220 globus_i_soap_message_xio_https_stack,
221 globus_i_soap_message_http_driver);
222 148 if(result != GLOBUS_SUCCESS)
223 {
224 0 result = GlobusSoapMessageErrorFailedTransport(
225 result, "Failed to push gsi driver onto stack");
226 0 goto error;
227 }
228
229 148 result = globus_xio_stack_push_driver(
230 globus_i_soap_message_xio_https_stack,
231 globus_i_soap_message_buffer_driver);
232 148 if(result != GLOBUS_SUCCESS)
233 {
234 0 result = GlobusSoapMessageErrorFailedTransport(
235 result, "Failed to push gsi driver onto stack");
236 0 goto error;
237 }
238
239 148 xmlSchemaInitTypes();
240
241 148 globus_xsd_type_registry_init(&GLOBUS_XSD_BASE_REGISTRY);
242 148 globus_xsd_type_registry_add_base_types(GLOBUS_XSD_BASE_REGISTRY);
243
244 148 globus_xsd_type_registry_init(&GLOBUS_GLOBAL_TYPE_REGISTRY);
245 148 globus_xsd_type_registry_add_base_types(GLOBUS_GLOBAL_TYPE_REGISTRY);
246
247 148 goto exit;
248
249 0 error:
250
251 0 if(globus_i_soap_message_xio_stack)
252 {
253 0 globus_xio_stack_destroy(globus_i_soap_message_xio_stack);
254 }
255
256 0 if(globus_i_soap_message_buffer_driver)
257 {
258 0 globus_xio_driver_unload(globus_i_soap_message_buffer_driver);
259 }
260
261 0 if(globus_i_soap_message_http_driver)
262 {
263 0 globus_xio_driver_unload(globus_i_soap_message_http_driver);
264 }
265
266 0 if(globus_i_soap_message_tcp_driver)
267 {
268 0 globus_xio_driver_unload(globus_i_soap_message_tcp_driver);
269 }
270
271 0 if(globus_i_soap_message_file_driver)
272 {
273 0 globus_xio_driver_unload(globus_i_soap_message_file_driver);
274 }
275
276 0 if(globus_i_soap_message_xio_file_stack)
277 {
278 0 globus_xio_stack_destroy(globus_i_soap_message_xio_file_stack);
279 }
280
281 0 if(globus_i_soap_message_gsi_driver)
282 {
283 0 globus_xio_driver_unload(globus_i_soap_message_gsi_driver);
284 }
285
286 0 if(globus_i_soap_message_xio_https_stack)
287 {
288 0 globus_xio_stack_destroy(globus_i_soap_message_xio_https_stack);
289 }
290
291 148 exit:
292
293 148 GlobusSoapMessageDebugExit();
294 148 return (int) result;
295 }
296
297 static int
298 globus_l_soap_message_deactivate()
299 120 {
300 120 int rc = 0;
301 GlobusFuncName(globus_l_soap_message_deactivate);
302 120 GlobusSoapMessageDebugEnter();
303
304 120 if(GLOBUS_XSD_BASE_REGISTRY)
305 {
306 120 globus_xsd_type_registry_destroy(GLOBUS_XSD_BASE_REGISTRY);
307 120 GLOBUS_XSD_BASE_REGISTRY = NULL;
308 }
309
310 120 if(GLOBUS_GLOBAL_TYPE_REGISTRY)
311 {
312 120 globus_xsd_type_registry_destroy(GLOBUS_GLOBAL_TYPE_REGISTRY);
313 120 GLOBUS_GLOBAL_TYPE_REGISTRY = NULL;
314 }
315
316 120 xmlSchemaCleanupTypes();
317
318 120 if(globus_i_soap_message_file_driver)
319 {
320 120 globus_xio_driver_unload(globus_i_soap_message_file_driver);
321 }
322
323 120 if(globus_i_soap_message_xio_https_stack)
324 {
325 120 globus_xio_stack_destroy(globus_i_soap_message_xio_https_stack);
326 }
327
328 120 if(globus_i_soap_message_xio_file_stack)
329 {
330 120 globus_xio_stack_destroy(globus_i_soap_message_xio_file_stack);
331 }
332
333 120 if(globus_i_soap_message_xio_stack)
334 {
335 120 globus_xio_stack_destroy(globus_i_soap_message_xio_stack);
336 }
337
338 120 if(globus_i_soap_message_buffer_driver)
339 {
340 120 globus_xio_driver_unload(globus_i_soap_message_buffer_driver);
341 }
342
343 120 if(globus_i_soap_message_http_driver)
344 {
345 120 globus_xio_driver_unload(globus_i_soap_message_http_driver);
346 }
347
348 120 if(globus_i_soap_message_tcp_driver)
349 {
350 120 globus_xio_driver_unload(globus_i_soap_message_tcp_driver);
351 }
352
353 120 if(globus_i_soap_message_gsi_driver)
354 {
355 120 globus_xio_driver_unload(globus_i_soap_message_gsi_driver);
356 }
357
358 120 rc = globus_module_deactivate(GLOBUS_XIO_MODULE);
359 120 if(rc != GLOBUS_SUCCESS)
360 {
361 0 return rc;
362 }
363
364 120 rc = globus_module_deactivate(GLOBUS_COMMON_MODULE);
365 120 if(rc != GLOBUS_SUCCESS)
366 {
367 0 return rc;
368 }
369
370 120 return GLOBUS_SUCCESS;