diff options
| author | Damien Laniel <dlaniel@entrouvert.com> | 2007-04-24 15:25:08 +0000 |
|---|---|---|
| committer | Damien Laniel <dlaniel@entrouvert.com> | 2007-04-24 15:25:08 +0000 |
| commit | 5c99d2ea80d0aade07462a8d3ee7e329a76e2c7a (patch) | |
| tree | 8e7a08e805c17fbdf72b53b1bfd2cd08064b015a /lasso/id-ff | |
| parent | fce9becb19dcf6501c760c952416654fb3920fad (diff) | |
implemented discovery query
Diffstat (limited to 'lasso/id-ff')
| -rw-r--r-- | lasso/id-ff/identity.c | 64 | ||||
| -rw-r--r-- | lasso/id-ff/login.c | 1 | ||||
| -rw-r--r-- | lasso/id-ff/server.c | 2 |
3 files changed, 63 insertions, 4 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c index c9234d47..cf1f703a 100644 --- a/lasso/id-ff/identity.c +++ b/lasso/id-ff/identity.c @@ -37,6 +37,7 @@ struct _LassoIdentityPrivate GList *resource_offerings; gboolean dispose_has_run; GList *svcMD; + GHashTable *eprs; }; /*****************************************************************************/ @@ -250,6 +251,30 @@ lasso_identity_get_svc_metadatas(LassoIdentity *identity, const char *service_ty return result; } +gint +lasso_identity_add_endpoint_reference(LassoIdentity *identity, LassoWsAddrEndpointReference *epr) +{ + GList *i; + + for (i = g_list_first(epr->Metadata->any); i != NULL; i = g_list_next(i)) { + if (LASSO_IS_IDWSF2_DISCO_SERVICE_TYPE(i->data)) { + g_hash_table_insert(identity->private_data->eprs, + g_strdup(LASSO_IDWSF2_DISCO_SERVICE_TYPE(i->data)->content), + g_object_ref(epr)); + identity->is_dirty = TRUE; + break; + } + } + + return 0; +} + +LassoWsAddrEndpointReference * +lasso_identity_get_endpoint_reference(LassoIdentity *identity, gchar *service_type) { + return LASSO_WSA_ENDPOINT_REFERENCE(g_hash_table_lookup( + identity->private_data->eprs, service_type)); +} + #endif @@ -278,6 +303,9 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump) { xmlNode *xmlnode; LassoIdentity *identity = LASSO_IDENTITY(node); +#ifdef LASSO_WSF_ENABLED + xmlNode *t; +#endif xmlnode = xmlNewNode(NULL, (xmlChar*)"Identity"); xmlSetNs(xmlnode, xmlNewNs(xmlnode, (xmlChar*)LASSO_LASSO_HREF, NULL)); @@ -294,12 +322,18 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump) /* Service Metadatas (SvcMD) */ if (identity->private_data->svcMD != NULL) { - xmlNode *t; t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"SvcMDs", NULL); g_list_foreach(identity->private_data->svcMD, (GFunc)add_childnode_from_list, t); } + /* Endpoint References */ + if (identity->private_data->eprs != NULL + && g_hash_table_size(identity->private_data->eprs)) + t = xmlNewTextChild(xmlnode, NULL, (xmlChar*)"EndpointReferences", NULL); + g_hash_table_foreach(identity->private_data->eprs, + (GHFunc)add_childnode_from_hashtable, t); + /* Simpler version which has the drawback of not working. */ /* Kept here in case it can work and be a nicer solution */ /* g_list_foreach(identity->private_data->svcMD, */ @@ -314,7 +348,9 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) { LassoIdentity *identity = LASSO_IDENTITY(node); xmlNode *t; +#ifdef LASSO_WSF_ENABLED xmlNode *t2; +#endif t = xmlnode->children; while (t) { @@ -358,6 +394,23 @@ init_from_xml(LassoNode *node, xmlNode *xmlnode) } } + /* Endpoint References */ + if (strcmp((char*)t->name, "EndpointReferences") == 0) { + t2 = t->children; + while (t2) { + LassoWsAddrEndpointReference *epr; + if (t2->type != XML_ELEMENT_NODE) { + t2 = t2->next; + continue; + } + epr = LASSO_WSA_ENDPOINT_REFERENCE( + lasso_wsa_endpoint_reference_new()); + LASSO_NODE_GET_CLASS(epr)->init_from_xml(LASSO_NODE(epr), t2); + lasso_identity_add_endpoint_reference(identity, epr); + t2 = t2->next; + } + } + /* Simpler version which has the drawback of not working. */ /* Kept here in case it can work and be a nicer solution */ /* if (strcmp((char*)t->name, "SvcMD") == 0) { */ @@ -403,6 +456,9 @@ dispose(GObject *object) g_hash_table_destroy(identity->federations); identity->federations = NULL; + g_hash_table_destroy(identity->private_data->eprs); + identity->private_data->eprs = NULL; + G_OBJECT_CLASS(parent_class)->dispose(object); } @@ -426,7 +482,11 @@ instance_init(LassoIdentity *identity) identity->private_data->resource_offerings = NULL; identity->private_data->dispose_has_run = FALSE; identity->private_data->svcMD = NULL; - +#ifdef LASSO_WSF_ENABLED + identity->private_data->eprs = g_hash_table_new_full(g_str_hash, g_str_equal, + (GDestroyNotify)g_free, + (GDestroyNotify)lasso_wsa_endpoint_reference_destroy); +#endif identity->federations = g_hash_table_new_full(g_str_hash, g_str_equal, (GDestroyNotify)g_free, (GDestroyNotify)lasso_federation_destroy); diff --git a/lasso/id-ff/login.c b/lasso/id-ff/login.c index ef7e56ea..7e2d7490 100644 --- a/lasso/id-ff/login.c +++ b/lasso/id-ff/login.c @@ -1834,7 +1834,6 @@ lasso_login_set_resourceId(LassoLogin *login, const char *content) return 0; } - /*****************************************************************************/ /* private methods */ /*****************************************************************************/ diff --git a/lasso/id-ff/server.c b/lasso/id-ff/server.c index ab447bfd..1133d3b4 100644 --- a/lasso/id-ff/server.c +++ b/lasso/id-ff/server.c @@ -239,13 +239,13 @@ add_provider_childnode(gchar *key, LassoProvider *value, xmlNode *xmlnode) xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } +#ifdef LASSO_WSF_ENABLED static void add_service_childnode(gchar *key, LassoNode *value, xmlNode *xmlnode) { xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE)); } -#ifdef LASSO_WSF_ENABLED static void add_childnode_from_list(LassoNode *value, xmlNode *xmlnode) { |
