diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2007-04-25 12:51:55 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2007-04-25 12:51:55 +0000 |
| commit | dc0ebd749ea26b1bf2640858df60b8e207de8fe7 (patch) | |
| tree | 469eaf6944c0ec4a3a8e1e01f1695b7a1e849e52 | |
| parent | 10c8fcb306ac27c161631d71c10b5b2361ce6858 (diff) | |
| download | lasso-dc0ebd749ea26b1bf2640858df60b8e207de8fe7.tar.gz lasso-dc0ebd749ea26b1bf2640858df60b8e207de8fe7.tar.xz lasso-dc0ebd749ea26b1bf2640858df60b8e207de8fe7.zip | |
new server.addServiceFromDump method, and extended addService to work for both
id-wsf 1 and 2; also necessary to add quick hack in new_from_xmlnode to map
SvcMD to SvcMetadata.
| -rw-r--r-- | lasso/id-ff/server.c | 32 | ||||
| -rw-r--r-- | lasso/id-ff/server.h | 4 | ||||
| -rw-r--r-- | lasso/xml/xml.c | 2 | ||||
| -rw-r--r-- | swig/Lasso.i | 5 |
4 files changed, 35 insertions, 8 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index 89fbf9f3..e0522895 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -95,20 +95,38 @@ lasso_server_add_provider(LassoServer *server, LassoProviderRole role, * Return value: 0 on success; a negative value if an error occured. **/ gint -lasso_server_add_service(LassoServer *server, LassoDiscoServiceInstance *service) +lasso_server_add_service(LassoServer *server, LassoNode *service) { #ifdef LASSO_WSF_ENABLED g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); - g_return_val_if_fail(LASSO_IS_DISCO_SERVICE_INSTANCE(service), - LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); - - g_hash_table_insert(server->services, g_strdup(service->ServiceType), - g_object_ref(service)); + g_return_val_if_fail(service != NULL, LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); + + if (LASSO_IS_DISCO_SERVICE_INSTANCE(service)) { + g_hash_table_insert(server->services, + g_strdup(LASSO_DISCO_SERVICE_INSTANCE(service)->ServiceType), + g_object_ref(service)); + } else if (LASSO_IS_IDWSF2_DISCO_SVC_METADATA(service)) { + return lasso_server_add_svc_metadata(server, + LASSO_IDWSF2_DISCO_SVC_METADATA(service)); + } else { + return LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ; + } #endif - return 0; } + +gint +lasso_server_add_service_from_dump(LassoServer *server, const gchar *dump) +{ + g_return_val_if_fail(dump != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); + LassoNode *node; + + node = lasso_node_new_from_dump(dump); + + return lasso_server_add_service(server, node); +} + #ifdef LASSO_WSF_ENABLED gint lasso_server_add_svc_metadata(LassoServer *server, LassoIdWsf2DiscoSvcMetadata *metadata) diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h index b1e0ba97..ec64f9bc 100644 --- a/lasso/id-ff/server.h +++ b/lasso/id-ff/server.h @@ -36,6 +36,7 @@ extern "C" { #else typedef void LassoDiscoServiceInstance; #endif + #include <lasso/id-ff/provider.h> @@ -85,7 +86,8 @@ LASSO_EXPORT gint lasso_server_add_provider (LassoServer *server, LassoProviderRole role, const gchar *metadata, const gchar *public_key, const gchar *ca_cert_chain); -LASSO_EXPORT gint lasso_server_add_service(LassoServer *server, LassoDiscoServiceInstance *service); +LASSO_EXPORT gint lasso_server_add_service(LassoServer *server, LassoNode *service); +LASSO_EXPORT gint lasso_server_add_service_from_dump(LassoServer *server, const gchar *dump); LASSO_EXPORT void lasso_server_destroy(LassoServer *server); diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index edc9b2a8..8c573edf 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -1423,6 +1423,8 @@ lasso_node_new_from_xmlNode(xmlNode *xmlnode) node_name = (char*)xmlnode->name; if (strcmp(node_name, "EncryptedAssertion") == 0) { typename = g_strdup("LassoSaml2EncryptedElement"); + } else if (strcmp(node_name, "SvcMD") == 0) { + typename = g_strdup("LassoIdWsf2DiscoSvcMetadata"); } else { typename = g_strdup_printf("Lasso%s%s", prefix, node_name); } diff --git a/swig/Lasso.i b/swig/Lasso.i index 156579c6..c180e8fb 100644 --- a/swig/Lasso.i +++ b/swig/Lasso.i @@ -5268,6 +5268,10 @@ typedef struct { THROW_ERROR() int addService(LassoDiscoServiceInstance *service); END_THROW_ERROR() + + THROW_ERROR() + int addServiceFromDump(const char *dump); + END_THROW_ERROR() #endif %newobject dump; @@ -5345,6 +5349,7 @@ LassoStringList *LassoServer_providerIds_get(LassoServer *self) { #define LassoServer_addProvider lasso_server_add_provider #define LassoServer_addService lasso_server_add_service +#define LassoServer_addServiceFromDump lasso_server_add_service_from_dump #define LassoServer_dump lasso_server_dump #define LassoServer_getProvider lasso_server_get_provider #define LassoServer_getService lasso_server_get_service |
