summaryrefslogtreecommitdiffstats
path: root/libcsoap/soap-router.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcsoap/soap-router.c')
-rw-r--r--libcsoap/soap-router.c34
1 files changed, 28 insertions, 6 deletions
diff --git a/libcsoap/soap-router.c b/libcsoap/soap-router.c
index 7b93b03..c4252c2 100644
--- a/libcsoap/soap-router.c
+++ b/libcsoap/soap-router.c
@@ -1,5 +1,5 @@
/******************************************************************
-* $Id: soap-router.c,v 1.7 2006/02/27 22:26:02 snowdrop Exp $
+* $Id: soap-router.c,v 1.8 2006/03/07 16:22:24 m0gg Exp $
*
* CSOAP Project: A SOAP client/server library in C
* Copyright (C) 2003 Ferhat Ayaz
@@ -29,6 +29,10 @@
#include <string.h>
#endif
+#ifdef HAVE_ERRNO_H
+#include <errno.h>
+#endif
+
#include "soap-router.h"
SoapRouter *
@@ -36,10 +40,12 @@ soap_router_new(void)
{
SoapRouter *router;
- router = (SoapRouter *) malloc(sizeof(SoapRouter));
- router->service_head = NULL;
- router->service_tail = NULL;
- router->default_service = NULL;
+ if (!(router = (SoapRouter *) malloc(sizeof(SoapRouter))))
+ {
+ log_error2("malloc failed (%s)", strerror(errno));
+ return NULL;
+ }
+ memset(router, 0, sizeof(SoapRouter));
return router;
}
@@ -68,6 +74,17 @@ soap_router_register_service(SoapRouter * router,
}
void
+soap_router_register_description(SoapRouter * router, xmlDocPtr wsdl)
+{
+ if (router->wsdl)
+ xmlFreeDoc(router->wsdl);
+
+ router->wsdl = xmlCopyDoc(wsdl, 1);
+
+ return;
+}
+
+void
soap_router_register_default_service(SoapRouter *router, SoapServiceFunc func, const char *method, const char *urn) {
SoapService *service;
@@ -123,7 +140,8 @@ soap_router_free(SoapRouter * router)
{
SoapServiceNode *node;
log_verbose2("enter: router=%p", router);
- if (router == NULL)
+
+ if (!router)
return;
while (router->service_head)
@@ -135,7 +153,11 @@ soap_router_free(SoapRouter * router)
free(router->service_head);
router->service_head = node;
}
+ if (router->wsdl)
+ xmlFreeDoc(router->wsdl);
free(router);
log_verbose1("leave with success");
+
+ return;
}