summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2007-04-25 12:51:55 +0000
committerFrederic Peters <fpeters@entrouvert.com>2007-04-25 12:51:55 +0000
commitdc0ebd749ea26b1bf2640858df60b8e207de8fe7 (patch)
tree469eaf6944c0ec4a3a8e1e01f1695b7a1e849e52
parent10c8fcb306ac27c161631d71c10b5b2361ce6858 (diff)
downloadlasso-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.c32
-rw-r--r--lasso/id-ff/server.h4
-rw-r--r--lasso/xml/xml.c2
-rw-r--r--swig/Lasso.i5
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