diff options
| author | Valery Febvre <vfebvre at easter-eggs.com> | 2004-12-10 17:44:30 +0000 |
|---|---|---|
| committer | Valery Febvre <vfebvre at easter-eggs.com> | 2004-12-10 17:44:30 +0000 |
| commit | 7cae9ab205c78edc931eb781226a237e2edcd8f8 (patch) | |
| tree | 9b6688b2343b774de18c6befa33ae521940d0ae1 | |
| parent | 21828cf8d5b83994afddf4c9df3d71d57b0dc177 (diff) | |
Added lasso_server_add_service() method
| -rw-r--r-- | lasso/id-ff/server.c | 53 | ||||
| -rw-r--r-- | lasso/id-ff/server.h | 6 |
2 files changed, 57 insertions, 2 deletions
diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index 8debdf1a..cdec3b0b 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -66,8 +66,35 @@ lasso_server_add_provider(LassoServer *server, LassoProviderRole role, return 0; } +gint +lasso_server_add_service(LassoServer *server, + const gchar *service_type, + const gchar *service_endpoint) +{ + LassoService *service; + GList *service_type_list; + + g_return_val_if_fail(LASSO_IS_SERVER(server), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); + g_return_val_if_fail(service_type != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); + g_return_val_if_fail(service_endpoint != NULL, LASSO_PARAM_ERROR_INVALID_VALUE); + + /* create a new LassoService */ + service = lasso_service_new(service_type, service_endpoint); + + /* search an existing GList for key type */ + service_type_list = (GList *)g_hash_table_lookup(server->services, + (gconstpointer)service_type); + /* append new service */ + service_type_list = g_list_append(service_type_list, service); + g_hash_table_replace(server->services, + (gpointer)g_strdup(service_type), (gpointer)service_type_list); + + return 0; +} + gchar* -lasso_server_get_authnRequestsSigned(LassoServer *server, GError **err) +lasso_server_get_authnRequestsSigned(LassoServer *server, + GError **err) { /* XXX to do differently (add a boolean to struct) */ g_assert_not_reached(); @@ -88,11 +115,21 @@ lasso_server_destroy(LassoServer *server) static LassoNodeClass *parent_class = NULL; -static void add_provider_childnode(gchar *key, LassoProvider *value, xmlNode *xmlnode) +static void +add_provider_childnode(gchar *key, LassoProvider *value, xmlNode *xmlnode) { xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value))); } +static void +add_service_childnode(gchar *key, GList *value, xmlNode *xmlnode) +{ + while (value != NULL) { + xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value->data))); + value = g_list_next(value); + } +} + static xmlNode* get_xmlNode(LassoNode *node) { @@ -112,12 +149,20 @@ get_xmlNode(LassoNode *node) xmlNewTextChild(xmlnode, NULL, "CertificateFilePath", server->certificate); xmlSetProp(xmlnode, "SignatureMethod", signature_methods[server->signature_method]); + /* Providers */ if (g_hash_table_size(server->providers)) { xmlNode *t; t = xmlNewTextChild(xmlnode, NULL, "Providers", NULL); g_hash_table_foreach(server->providers, (GHFunc)add_provider_childnode, t); } + /* Services */ + if (g_hash_table_size(server->services)) { + xmlNode *t; + t = xmlNewTextChild(xmlnode, NULL, "Services", NULL); + g_hash_table_foreach(server->services, + (GHFunc)add_service_childnode, t); + } return xmlnode; } @@ -285,6 +330,10 @@ instance_init(LassoServer *server) server->secret_key = NULL; server->certificate = NULL; server->signature_method = LASSO_SIGNATURE_METHOD_RSA_SHA1; + + /* FIXME: set the value_destroy_func */ + server->services = g_hash_table_new_full(g_str_hash, g_str_equal, + (GDestroyNotify)g_free, NULL); } static void diff --git a/lasso/id-ff/server.h b/lasso/id-ff/server.h index 9e831758..e225796c 100644 --- a/lasso/id-ff/server.h +++ b/lasso/id-ff/server.h @@ -31,6 +31,7 @@ extern "C" { #endif /* __cplusplus */ #include <lasso/id-ff/provider.h> +#include <lasso/id-ff/service.h> #define LASSO_TYPE_SERVER (lasso_server_get_type()) #define LASSO_SERVER(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), LASSO_TYPE_SERVER, LassoServer)) @@ -49,6 +50,7 @@ struct _LassoServer { LassoProvider parent; GHashTable *providers; + GHashTable *services; /* hash for services with 'service type' as key */ gchar *private_key; gchar *secret_key; @@ -76,6 +78,10 @@ LASSO_EXPORT gint lasso_server_add_provider (LassoServer *server, LassoProviderRole role, gchar *metadata, gchar *public_key, gchar *ca_cert_chain); +LASSO_EXPORT gint lasso_server_add_service(LassoServer *server, + const gchar *service_type, + const gchar *service_endpoint); + LASSO_EXPORT void lasso_server_destroy(LassoServer *server); LASSO_EXPORT gchar* lasso_server_get_first_providerID(LassoServer *server); LASSO_EXPORT LassoProvider* lasso_server_get_provider(LassoServer *server, gchar *providerID); |
