summaryrefslogtreecommitdiffstats
path: root/lasso/id-ff
diff options
context:
space:
mode:
authorDamien Laniel <dlaniel@entrouvert.com>2007-04-24 15:25:08 +0000
committerDamien Laniel <dlaniel@entrouvert.com>2007-04-24 15:25:08 +0000
commit5c99d2ea80d0aade07462a8d3ee7e329a76e2c7a (patch)
tree8e7a08e805c17fbdf72b53b1bfd2cd08064b015a /lasso/id-ff
parentfce9becb19dcf6501c760c952416654fb3920fad (diff)
implemented discovery query
Diffstat (limited to 'lasso/id-ff')
-rw-r--r--lasso/id-ff/identity.c64
-rw-r--r--lasso/id-ff/login.c1
-rw-r--r--lasso/id-ff/server.c2
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)
{