diff options
| author | Frederic Peters <fpeters@entrouvert.com> | 2005-08-09 07:31:01 +0000 |
|---|---|---|
| committer | Frederic Peters <fpeters@entrouvert.com> | 2005-08-09 07:31:01 +0000 |
| commit | b3c376e02f5f78c4718645a7bf56e6afe7d5322e (patch) | |
| tree | b9f705ec0b5c34da001c9a5ec3cf94cfc642cf28 | |
| parent | 86456f1894a70f75dc732454cd2500dff627f900 (diff) | |
renamed crunch to build since it doesn't look like there is a need for an
intermediate function for the moment. process remove entries. create correct
answer (when everything goes ok, no support for failure yet)
| -rw-r--r-- | lasso/id-ff/identity.c | 29 | ||||
| -rw-r--r-- | lasso/id-ff/identityprivate.h | 1 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.c | 59 | ||||
| -rw-r--r-- | lasso/id-wsf/discovery.h | 2 | ||||
| -rw-r--r-- | swig/Lasso-wsf.i | 4 |
5 files changed, 79 insertions, 16 deletions
diff --git a/lasso/id-ff/identity.c b/lasso/id-ff/identity.c index 9eccd34d..849667bc 100644 --- a/lasso/id-ff/identity.c +++ b/lasso/id-ff/identity.c @@ -140,6 +140,35 @@ lasso_identity_add_resource_offering(LassoIdentity *identity, return 0; } + +/** + * lasso_identity_remove_resource_offering: + * @identity: a #LassoIdentity + * @entryID: the resource offering entry ID + * + * Remove resource offering about identity with @entryID + * + * Return value: TRUE on success; FALSE if the offering was not found. + **/ +gboolean +lasso_identity_remove_resource_offering(LassoIdentity *identity, const char *entryID) +{ + GList *iter; + LassoDiscoResourceOffering *t; + + iter = identity->private_data->resource_offerings; + while (iter) { + t = iter->data; + iter = g_list_next(iter); + if (strcmp(t->entryID, entryID) == 0) { + identity->private_data->resource_offerings = g_list_remove( + identity->private_data->resource_offerings, t); + lasso_node_destroy(LASSO_NODE(t)); + return TRUE; + } + } + return FALSE; +} #endif diff --git a/lasso/id-ff/identityprivate.h b/lasso/id-ff/identityprivate.h index 918a8178..e17349a6 100644 --- a/lasso/id-ff/identityprivate.h +++ b/lasso/id-ff/identityprivate.h @@ -36,6 +36,7 @@ gint lasso_identity_remove_federation(LassoIdentity *identity, const char *provi #include <lasso/xml/disco_resource_offering.h> gint lasso_identity_add_resource_offering(LassoIdentity *identity, LassoDiscoResourceOffering *offering); +gboolean lasso_identity_remove_resource_offering(LassoIdentity *identity, const char *entryID); #endif diff --git a/lasso/id-wsf/discovery.c b/lasso/id-wsf/discovery.c index 2356f290..11bff71e 100644 --- a/lasso/id-wsf/discovery.c +++ b/lasso/id-wsf/discovery.c @@ -32,6 +32,7 @@ struct _LassoDiscoveryPrivate { gboolean dispose_has_run; + GList *new_entry_ids; }; /*****************************************************************************/ @@ -368,9 +369,7 @@ gint lasso_discovery_process_modify_msg(LassoDiscovery *discovery, const gchar *message) { - LassoDiscoModifyResponse *response; LassoSoapEnvelope *envelope; - LassoUtilityStatus *status; LassoDiscoModify *request; g_return_val_if_fail(LASSO_IS_DISCOVERY(discovery), LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ); @@ -378,13 +377,6 @@ lasso_discovery_process_modify_msg(LassoDiscovery *discovery, lasso_wsf_profile_process_soap_request_msg(LASSO_WSF_PROFILE(discovery), message); - status = lasso_utility_status_new(LASSO_DST_STATUS_CODE_OK); - response = lasso_disco_modify_response_new(status); - LASSO_WSF_PROFILE(discovery)->response = LASSO_NODE(response); - - envelope = LASSO_WSF_PROFILE(discovery)->soap_envelope_response; - envelope->Body->any = g_list_append(envelope->Body->any, response); - request = LASSO_DISCO_MODIFY(LASSO_WSF_PROFILE(discovery)->request); if (request->ResourceID) @@ -396,10 +388,19 @@ lasso_discovery_process_modify_msg(LassoDiscovery *discovery, } gint -lasso_discovery_crunch_modify_msg(LassoDiscovery *discovery) +lasso_discovery_build_modify_response_msg(LassoDiscovery *discovery) { LassoDiscoModify *request = LASSO_DISCO_MODIFY(LASSO_WSF_PROFILE(discovery)->request); + LassoDiscoModifyResponse *response; + LassoSoapEnvelope *envelope; GList *iter; + gboolean failure = FALSE; + char *new_entry_ids = NULL, *t_new_entry_ids = NULL; + + if (request->InsertEntry) { + new_entry_ids = g_malloc(10*g_list_length(request->InsertEntry)); + t_new_entry_ids = new_entry_ids; + } iter = request->InsertEntry; while (iter) { @@ -408,10 +409,42 @@ lasso_discovery_crunch_modify_msg(LassoDiscovery *discovery) 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))); + + t_new_entry_ids = g_stpcpy(t_new_entry_ids, entry->ResourceOffering->entryID); + t_new_entry_ids = g_stpcpy(t_new_entry_ids, " "); + } + if (t_new_entry_ids) { + t_new_entry_ids[-1] = 0; /* remove trailing white space */ } - return 0; + iter = request->RemoveEntry; + while (iter) { + LassoDiscoRemoveEntry *entry = iter->data; + iter = g_list_next(iter); + + if (lasso_identity_remove_resource_offering( + LASSO_WSF_PROFILE(discovery)->identity, + entry->entryID) == FALSE) { + failure = TRUE; + } + } + + if (failure) { + /* XXX: should restore previous content */ + } + + /* build response */ + response = lasso_disco_modify_response_new( + lasso_utility_status_new(LASSO_DST_STATUS_CODE_OK)); + if (new_entry_ids) { + response->newEntryIDs = g_strdup(new_entry_ids); + g_free(new_entry_ids); + } + LASSO_WSF_PROFILE(discovery)->response = LASSO_NODE(response); + envelope = LASSO_WSF_PROFILE(discovery)->soap_envelope_response; + envelope->Body->any = g_list_append(envelope->Body->any, response); + + return lasso_wsf_profile_build_soap_response_msg(LASSO_WSF_PROFILE(discovery)); } gint @@ -509,7 +542,7 @@ finalize(GObject *object) static void instance_init(LassoDiscovery *discovery) { - discovery->private_data = g_new(LassoDiscoveryPrivate, 1); + discovery->private_data = g_new0(LassoDiscoveryPrivate, 1); discovery->private_data->dispose_has_run = FALSE; } diff --git a/lasso/id-wsf/discovery.h b/lasso/id-wsf/discovery.h index 87c67daf..b051b188 100644 --- a/lasso/id-wsf/discovery.h +++ b/lasso/id-wsf/discovery.h @@ -105,7 +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_build_modify_response_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 75c97915..9f7a5f43 100644 --- a/swig/Lasso-wsf.i +++ b/swig/Lasso-wsf.i @@ -3501,7 +3501,7 @@ typedef struct { END_THROW_ERROR THROW_ERROR - int crunchModifyMsg(); + int buildModifyResponseMsg(); END_THROW_ERROR LassoDiscoInsertEntry* addInsertEntry(LassoDiscoServiceInstance *serviceInstance, @@ -3652,7 +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_buildModifyResponseMsg lasso_discovery_build_modify_response_msg #define LassoDiscovery_initModify lasso_discovery_init_modify #define LassoDiscovery_initQuery lasso_discovery_init_query #define LassoDiscovery_processModifyMsg lasso_discovery_process_modify_msg |
