summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-08-08 18:51:21 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-08-08 18:51:21 +0000
commit86456f1894a70f75dc732454cd2500dff627f900 (patch)
tree42fdd0748c7b9b9edc8b6a4951ad1476ec725360
parent755e15e4e9affd5298ac12f519e86b85a20be135 (diff)
lasso_discovery_crunch_modify_msg() (waiting for another name) process disco
modify insertEntries and adds them to active identity
-rw-r--r--lasso/id-ff/identity.c50
-rw-r--r--lasso/id-ff/identityprivate.h7
-rw-r--r--lasso/id-wsf/discovery.c20
-rw-r--r--lasso/id-wsf/discovery.h1
-rw-r--r--swig/Lasso-wsf.i6
5 files changed, 82 insertions, 2 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c
index 520a0589..9eccd34d 100644
--- a/lasso/id-ff/identity.c
+++ b/lasso/id-ff/identity.c
@@ -22,11 +22,13 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
+#include <lasso/lasso_config.h>
#include <lasso/id-ff/identity.h>
#include <lasso/id-ff/identityprivate.h>
struct _LassoIdentityPrivate
{
+ GList *resource_offerings;
gboolean dispose_has_run;
};
@@ -108,6 +110,39 @@ lasso_identity_destroy(LassoIdentity *identity)
lasso_node_destroy(LASSO_NODE(identity));
}
+#ifdef LASSO_WSF_ENABLED
+gint
+lasso_identity_add_resource_offering(LassoIdentity *identity,
+ LassoDiscoResourceOffering *offering)
+{
+ /* XXX: add proper entry id to offering */
+ int entry_id = 1;
+ char entry_id_s[20];
+ GList *iter;
+ LassoDiscoResourceOffering *t;
+
+ g_snprintf(entry_id_s, 18, "%d", entry_id);
+ iter = identity->private_data->resource_offerings;
+ while (iter) {
+ t = iter->data;
+ iter = g_list_next(iter);
+ if (strcmp(t->entryID, entry_id_s) == 0) {
+ entry_id++;
+ g_snprintf(entry_id_s, 18, "%d", entry_id);
+ iter = identity->private_data->resource_offerings; /* rewind */
+ }
+ }
+
+ offering->entryID = g_strdup(entry_id_s);
+ identity->private_data->resource_offerings = g_list_append(
+ identity->private_data->resource_offerings, g_object_ref(offering));
+ identity->is_dirty = TRUE;
+
+ return 0;
+}
+#endif
+
+
/*****************************************************************************/
/* private methods */
/*****************************************************************************/
@@ -120,6 +155,15 @@ add_federation_childnode(gchar *key, LassoFederation *value, xmlNode *xmlnode)
xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE));
}
+#ifdef LASSO_WSF_ENABLED
+static void
+add_resource_offering_childnode(LassoNode *value, xmlNode *xmlnode)
+{
+ xmlAddChild(xmlnode, lasso_node_get_xmlNode(LASSO_NODE(value), TRUE));
+}
+
+#endif
+
static xmlNode*
get_xmlNode(LassoNode *node, gboolean lasso_dump)
{
@@ -133,6 +177,10 @@ get_xmlNode(LassoNode *node, gboolean lasso_dump)
if (g_hash_table_size(identity->federations))
g_hash_table_foreach(identity->federations,
(GHFunc)add_federation_childnode, xmlnode);
+#ifdef LASSO_WSF_ENABLED
+ g_list_foreach(identity->private_data->resource_offerings,
+ (GFunc)add_resource_offering_childnode, xmlnode);
+#endif
return xmlnode;
}
@@ -201,7 +249,7 @@ finalize(GObject *object)
static void
instance_init(LassoIdentity *identity)
{
- identity->private_data = g_new(LassoIdentityPrivate, 1);
+ identity->private_data = g_new0(LassoIdentityPrivate, 1);
identity->private_data->dispose_has_run = FALSE;
identity->federations = g_hash_table_new_full(g_str_hash, g_str_equal,
diff --git a/lasso/id-ff/identityprivate.h b/lasso/id-ff/identityprivate.h
index 42030108..918a8178 100644
--- a/lasso/id-ff/identityprivate.h
+++ b/lasso/id-ff/identityprivate.h
@@ -32,6 +32,13 @@ extern "C" {
gint lasso_identity_add_federation(LassoIdentity *identity, LassoFederation *federation);
gint lasso_identity_remove_federation(LassoIdentity *identity, const char *providerID);
+#ifdef LASSO_WSF_ENABLED
+#include <lasso/xml/disco_resource_offering.h>
+gint lasso_identity_add_resource_offering(LassoIdentity *identity,
+ LassoDiscoResourceOffering *offering);
+#endif
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/lasso/id-wsf/discovery.c b/lasso/id-wsf/discovery.c
index 86d3a260..2356f290 100644
--- a/lasso/id-wsf/discovery.c
+++ b/lasso/id-wsf/discovery.c
@@ -27,6 +27,7 @@
#include <lasso/xml/saml_assertion.h>
#include <lasso/xml/saml_attribute_value.h>
#include <lasso/xml/disco_modify.h>
+#include <lasso/id-ff/identityprivate.h>
struct _LassoDiscoveryPrivate
{
@@ -395,6 +396,25 @@ lasso_discovery_process_modify_msg(LassoDiscovery *discovery,
}
gint
+lasso_discovery_crunch_modify_msg(LassoDiscovery *discovery)
+{
+ LassoDiscoModify *request = LASSO_DISCO_MODIFY(LASSO_WSF_PROFILE(discovery)->request);
+ GList *iter;
+
+ iter = request->InsertEntry;
+ while (iter) {
+ LassoDiscoInsertEntry *entry = iter->data;
+ iter = g_list_next(iter);
+
+ lasso_identity_add_resource_offering(LASSO_WSF_PROFILE(discovery)->identity,
+ entry->ResourceOffering);
+ fprintf(stderr, "an entry:\n%s\n\n", lasso_node_dump(LASSO_NODE(entry)));
+ }
+
+ return 0;
+}
+
+gint
lasso_discovery_process_modify_response_msg(LassoDiscovery *discovery, const gchar *message)
{
return lasso_wsf_profile_process_soap_response_msg(LASSO_WSF_PROFILE(discovery), message);
diff --git a/lasso/id-wsf/discovery.h b/lasso/id-wsf/discovery.h
index f542f3df..87c67daf 100644
--- a/lasso/id-wsf/discovery.h
+++ b/lasso/id-wsf/discovery.h
@@ -105,6 +105,7 @@ LASSO_EXPORT gchar* lasso_discovery_dump(LassoDiscovery *discovery);
LASSO_EXPORT gint lasso_discovery_init_insert(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering);
+LASSO_EXPORT gint lasso_discovery_crunch_modify_msg(LassoDiscovery *discovery);
LASSO_EXPORT gint lasso_discovery_init_modify(LassoDiscovery *discovery,
LassoDiscoResourceOffering *resourceOffering,
diff --git a/swig/Lasso-wsf.i b/swig/Lasso-wsf.i
index 983278d2..75c97915 100644
--- a/swig/Lasso-wsf.i
+++ b/swig/Lasso-wsf.i
@@ -3499,7 +3499,10 @@ typedef struct {
THROW_ERROR
int initInsert(LassoDiscoResourceOffering *newOffering);
END_THROW_ERROR
-
+
+ THROW_ERROR
+ int crunchModifyMsg();
+ END_THROW_ERROR
LassoDiscoInsertEntry* addInsertEntry(LassoDiscoServiceInstance *serviceInstance,
LassoDiscoResourceID *resourceID);
@@ -3649,6 +3652,7 @@ int LassoDiscovery_setSessionFromDump(LassoDiscovery *self, char *dump) {
#define LassoDiscovery_addRequestedServiceType lasso_discovery_add_requested_service_type
#define LassoDiscovery_addResourceOffering lasso_discovery_add_resource_offering
#define LassoDiscovery_initInsert lasso_discovery_init_insert
+#define LassoDiscovery_crunchModifyMsg lasso_discovery_crunch_modify_msg
#define LassoDiscovery_initModify lasso_discovery_init_modify
#define LassoDiscovery_initQuery lasso_discovery_init_query
#define LassoDiscovery_processModifyMsg lasso_discovery_process_modify_msg