summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2005-08-09 07:31:01 +0000
committerFrederic Peters <fpeters@entrouvert.com>2005-08-09 07:31:01 +0000
commitb3c376e02f5f78c4718645a7bf56e6afe7d5322e (patch)
treeb9f705ec0b5c34da001c9a5ec3cf94cfc642cf28
parent86456f1894a70f75dc732454cd2500dff627f900 (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.c29
-rw-r--r--lasso/id-ff/identityprivate.h1
-rw-r--r--lasso/id-wsf/discovery.c59
-rw-r--r--lasso/id-wsf/discovery.h2
-rw-r--r--swig/Lasso-wsf.i4
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