diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-08-08 18:51:21 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-08-08 18:51:21 +0000 |
| commit | 86456f1894a70f75dc732454cd2500dff627f900 (patch) | |
| tree | 42fdd0748c7b9b9edc8b6a4951ad1476ec725360 | |
| parent | 755e15e4e9affd5298ac12f519e86b85a20be135 (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.c | 50 | ||||
| -rw-r--r-- | lasso/id-ff/identityprivate.h | 7 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.c | 20 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.h | 1 | ||||
| -rw-r--r-- | swig/Lasso-wsf.i | 6 |
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 |
