diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-09-11 09:08:31 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-09-11 09:08:31 +0000 |
| commit | 930965e7f450a4855889fdb6412ca814e0051ef9 (patch) | |
| tree | 02c2e30363dd351b388e1b57dcc7c7cd538a01e0 | |
| parent | 27e9d0edcd1d0fb088bba0b2927ec06f45bac0b3 (diff) | |
| download | lasso-930965e7f450a4855889fdb6412ca814e0051ef9.tar.gz lasso-930965e7f450a4855889fdb6412ca814e0051ef9.tar.xz lasso-930965e7f450a4855889fdb6412ca814e0051ef9.zip | |
possibility to register new dst services.
| -rw-r--r-- | docs/reference/lasso-sections.txt | 1 | ||||
| -rw-r--r-- | lasso/id-wsf/data_service.c | 18 | ||||
| -rw-r--r-- | lasso/id-wsf/data_service.h | 5 | ||||
| -rw-r--r-- | lasso/xml/dst_modify.c | 13 | ||||
| -rw-r--r-- | lasso/xml/dst_modify_response.c | 13 | ||||
| -rw-r--r-- | lasso/xml/dst_query.c | 13 | ||||
| -rw-r--r-- | lasso/xml/dst_query_response.c | 13 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 56 | ||||
| -rw-r--r-- | lasso/xml/xml.h | 4 | ||||
| -rw-r--r-- | swig/Lasso.i | 5 |
10 files changed, 88 insertions, 53 deletions
diff --git a/docs/reference/lasso-sections.txt b/docs/reference/lasso-sections.txt index 899e0a4c..62254c24 100644 --- a/docs/reference/lasso-sections.txt +++ b/docs/reference/lasso-sections.txt @@ -901,6 +901,7 @@ lasso_init lasso_shutdown lasso_check_version LassoCheckVersionMode +lasso_register_dst_service </SECTION> <SECTION> diff --git a/lasso/id-wsf/data_service.c b/lasso/id-wsf/data_service.c index 456951c5..154957f8 100644 --- a/lasso/id-wsf/data_service.c +++ b/lasso/id-wsf/data_service.c @@ -142,12 +142,8 @@ lasso_data_service_init_query(LassoDataService *service, const char *select, offering = service->private_data->offering; query->hrefServiceType = g_strdup(offering->ServiceInstance->ServiceType); - if (strcmp(query->hrefServiceType, LASSO_PP_HREF) == 0) - query->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - else if (strcmp(query->hrefServiceType, LASSO_EP_HREF) == 0) - query->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - else { - /* unknown service type, (needs registration mechanism) */ + query->prefixServiceType = lasso_get_prefix_for_dst_service_href(query->hrefServiceType); + if (query->prefixServiceType == NULL) { return LASSO_ERROR_UNDEFINED; } @@ -487,14 +483,8 @@ lasso_data_service_init_modify(LassoDataService *service, const gchar *select, x offering = service->private_data->offering; modify->hrefServiceType = g_strdup(offering->ServiceInstance->ServiceType); - if (strcmp(modify->hrefServiceType, LASSO_PP_HREF) == 0) { - modify->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - } - else if (strcmp(modify->hrefServiceType, LASSO_EP_HREF) == 0) { - modify->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - } - else { - /* unknown service type, (needs registration mechanism) */ + modify->prefixServiceType = lasso_get_prefix_for_dst_service_href(modify->hrefServiceType); + if (modify->prefixServiceType == NULL) { return LASSO_ERROR_UNDEFINED; } diff --git a/lasso/id-wsf/data_service.h b/lasso/id-wsf/data_service.h index a2dd075f..0b218de5 100644 --- a/lasso/id-wsf/data_service.h +++ b/lasso/id-wsf/data_service.h @@ -114,7 +114,10 @@ LASSO_EXPORT gint lasso_data_service_process_modify_msg(LassoDataService *servic const gchar *soap_msg); LASSO_EXPORT gint lasso_data_service_process_modify_response_msg(LassoDataService *service, - const gchar *soap_msg); + const gchar *soap_msg); + +LASSO_EXPORT void lasso_data_service_register_service(LassoDataService *service, + const char *prefix, const char *href); #ifdef __cplusplus } diff --git a/lasso/xml/dst_modify.c b/lasso/xml/dst_modify.c index e7626389..1d5b5150 100644 --- a/lasso/xml/dst_modify.c +++ b/lasso/xml/dst_modify.c @@ -109,14 +109,11 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; - if (strcmp((char*)xmlnode->ns->href, LASSO_PP_HREF) == 0) { - query->hrefServiceType = g_strdup(LASSO_PP_HREF); - query->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - } else if (strcmp((char*)xmlnode->ns->href, LASSO_EP_HREF) == 0) { - query->hrefServiceType = g_strdup(LASSO_EP_HREF); - query->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - } else { - /* XXX */ + query->hrefServiceType = g_strdup((char*)xmlnode->ns->href); + query->prefixServiceType = lasso_get_prefix_for_dst_service_href( + query->hrefServiceType); + if (query->prefixServiceType == NULL) { + /* XXX: what to do here ? */ } return 0; diff --git a/lasso/xml/dst_modify_response.c b/lasso/xml/dst_modify_response.c index 7fc40331..8a85263f 100644 --- a/lasso/xml/dst_modify_response.c +++ b/lasso/xml/dst_modify_response.c @@ -90,14 +90,11 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; - if (strcmp((char*)xmlnode->ns->href, LASSO_PP_HREF) == 0) { - response->hrefServiceType = g_strdup(LASSO_PP_HREF); - response->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - } else if (strcmp((char*)xmlnode->ns->href, LASSO_EP_HREF) == 0) { - response->hrefServiceType = g_strdup(LASSO_EP_HREF); - response->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - } else { - /* XXX */ + response->hrefServiceType = g_strdup((char*)xmlnode->ns->href); + response->prefixServiceType = lasso_get_prefix_for_dst_service_href( + response->hrefServiceType); + if (response->prefixServiceType == NULL) { + /* XXX: what to do here ? */ } return 0; diff --git a/lasso/xml/dst_query.c b/lasso/xml/dst_query.c index 1f68b061..02209c70 100644 --- a/lasso/xml/dst_query.c +++ b/lasso/xml/dst_query.c @@ -100,14 +100,11 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; - if (strcmp((char*)xmlnode->ns->href, LASSO_PP_HREF) == 0) { - query->hrefServiceType = g_strdup(LASSO_PP_HREF); - query->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - } else if (strcmp((char*)xmlnode->ns->href, LASSO_EP_HREF) == 0) { - query->hrefServiceType = g_strdup(LASSO_EP_HREF); - query->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - } else { - /* XXX */ + query->hrefServiceType = g_strdup((char*)xmlnode->ns->href); + query->prefixServiceType = lasso_get_prefix_for_dst_service_href( + query->hrefServiceType); + if (query->prefixServiceType == NULL) { + /* XXX: what to do here ? */ } return 0; diff --git a/lasso/xml/dst_query_response.c b/lasso/xml/dst_query_response.c index 338ea927..f718c5a1 100644 --- a/lasso/xml/dst_query_response.c +++ b/lasso/xml/dst_query_response.c @@ -105,14 +105,11 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) rc = parent_class->init_from_xml(node, xmlnode); if (rc) return rc; - if (strcmp((char*)xmlnode->ns->href, LASSO_PP_HREF) == 0) { - response->hrefServiceType = g_strdup(LASSO_PP_HREF); - response->prefixServiceType = g_strdup(LASSO_PP_PREFIX); - } else if (strcmp((char*)xmlnode->ns->href, LASSO_EP_HREF) == 0) { - response->hrefServiceType = g_strdup(LASSO_EP_HREF); - response->prefixServiceType = g_strdup(LASSO_EP_PREFIX); - } else { - /* XXX */ + response->hrefServiceType = g_strdup((char*)xmlnode->ns->href); + response->prefixServiceType = lasso_get_prefix_for_dst_service_href( + response->hrefServiceType); + if (response->prefixServiceType == NULL) { + /* XXX: what to do here ? */ } return 0; diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index 43d8b126..7fd2a1c7 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -50,6 +50,50 @@ static void lasso_node_add_signature_template(LassoNode *node, xmlNode *xmlnode, struct XmlSnippet *snippet_signature); + +GHashTable *dst_services_by_href = NULL; /* Extra DST services, indexed on href */ +GHashTable *dst_services_by_prefix = NULL; /* Extra DST services, indexed on prefix */ + +/*****************************************************************************/ +/* global methods */ +/*****************************************************************************/ + + +/** + * lasso_register_dst_service: + * @prefix: prefix of DST service + * @href: href of DST service + * + * Registers prefix and href of a custom data service template service. + **/ +void +lasso_register_dst_service(const char *prefix, const char *href) +{ + if (dst_services_by_href == NULL) { + dst_services_by_href = g_hash_table_new_full( + g_str_hash, g_str_equal, g_free, g_free); + dst_services_by_prefix = g_hash_table_new_full( + g_str_hash, g_str_equal, g_free, g_free); + } + g_hash_table_insert(dst_services_by_prefix, g_strdup(prefix), g_strdup(href)); + g_hash_table_insert(dst_services_by_href, g_strdup(href), g_strdup(prefix)); +} + +char* +lasso_get_prefix_for_dst_service_href(const char *href) +{ + if (strcmp(href, LASSO_PP_HREF) == 0) + return g_strdup(LASSO_PP_PREFIX); + if (strcmp(href, LASSO_EP_HREF) == 0) + return g_strdup(LASSO_EP_PREFIX); + + if (dst_services_by_href == NULL) + return NULL; + + return g_strdup(g_hash_table_lookup(dst_services_by_href, href)); +} + + /*****************************************************************************/ /* virtual public methods */ /*****************************************************************************/ @@ -712,6 +756,7 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode) { char *prefix = NULL; char *typename; + char *tmp; GType gtype; LassoNode *node; xmlChar *xsitype; @@ -741,13 +786,12 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode) if (strcmp((char*)xmlnode->ns->href, LASSO_WSSE_HREF) == 0) prefix = "Wsse"; - /* XXX: new Dst namespaces can be added dynamically; they should not - * be hardcoded here - */ - if (strcmp((char*)xmlnode->ns->href, LASSO_PP_HREF) == 0) - prefix = "Dst"; - if (strcmp((char*)xmlnode->ns->href, LASSO_EP_HREF) == 0) + tmp = lasso_get_prefix_for_dst_service_href((char*)xmlnode->ns->href); + if (tmp) { prefix = "Dst"; + g_free(tmp); + } + if (strcmp((char*)prefix, "Dst") == 0 && strcmp((char*)xmlnode->name, "Status") == 0) prefix = "Utility"; if (strcmp((char*)prefix, "Disco") == 0 && strcmp((char*)xmlnode->name, "Status") == 0) diff --git a/lasso/xml/xml.h b/lasso/xml/xml.h index b87b3a4a..25cb122f 100644 --- a/lasso/xml/xml.h +++ b/lasso/xml/xml.h @@ -145,6 +145,10 @@ LASSO_EXPORT int lasso_node_init_from_xml(LassoNode *node, xmlNode *xmlnode); LASSO_EXPORT const char* lasso_strerror(int error_code); +LASSO_EXPORT void lasso_register_dst_service(const char *prefix, const char *href); +LASSO_EXPORT char* lasso_get_prefix_for_dst_service_href(const char *href); + + #ifdef LASSO_INTERNALS #include <lasso/xml/private.h> #endif diff --git a/swig/Lasso.i b/swig/Lasso.i index abcaadb4..caa8e8b7 100644 --- a/swig/Lasso.i +++ b/swig/Lasso.i @@ -1103,6 +1103,11 @@ typedef enum { int lasso_check_version(int major, int minor, int subminor, LassoCheckVersionMode mode = LASSO_CHECK_VERSION_NUMERIC); +#ifndef SWIGPHP4 +%rename(registerDstService) lasso_register_dst_service; +#endif +void lasso_register_dst_service(const char *prefix, const char *href); + /*********************************************************************** * Utility functions to handle nodes, strings, lists... |
