summaryrefslogtreecommitdiffstats
path: root/lasso/id-wsf-2.0
diff options
context:
space:
mode:
Diffstat (limited to 'lasso/id-wsf-2.0')
-rw-r--r--lasso/id-wsf-2.0/discovery.c42
-rw-r--r--lasso/id-wsf-2.0/discovery.h17
-rw-r--r--lasso/id-wsf-2.0/wsf2_profile.c38
-rw-r--r--lasso/id-wsf-2.0/wsf2_profile.h3
4 files changed, 95 insertions, 5 deletions
diff --git a/lasso/id-wsf-2.0/discovery.c b/lasso/id-wsf-2.0/discovery.c
index 6b55d246..61203651 100644
--- a/lasso/id-wsf-2.0/discovery.c
+++ b/lasso/id-wsf-2.0/discovery.c
@@ -73,6 +73,14 @@ lasso_idwsf2_discovery_destroy(LassoIdwsf2Discovery *discovery)
g_object_unref(G_OBJECT(discovery));
}
+gchar *
+lasso_idwsf2_discovery_get_metadata_dump(LassoIdwsf2Discovery *discovery)
+{
+ if (discovery->metadata == NULL)
+ return NULL;
+ return lasso_node_dump(LASSO_NODE(discovery->metadata));
+}
+
/**
* lasso_discovery_init_query
@@ -117,13 +125,43 @@ lasso_idwsf2_discovery_init_metadata_register(LassoIdwsf2Discovery *discovery,
lasso_wsf2_profile_init_soap_request(LASSO_WSF2_PROFILE(discovery),
LASSO_NODE(metadata_register));
- /* Get the url of the idp where we must send the soap request */
- LASSO_WSF2_PROFILE(discovery)->msg_url = g_strdup(disco_provider_id);
+ /* FIXME : Get the url of the disco service where we must send the soap request */
+ /* LASSO_WSF2_PROFILE(discovery)->msg_url = g_strdup(disco_provider_id); */
printf(lasso_node_dump(LASSO_NODE(metadata_register)));
return 0;
}
+gint
+lasso_idwsf2_discovery_process_metadata_register_msg(LassoIdwsf2Discovery *discovery, const gchar *message)
+{
+ LassoDiscoSvcMDRegister *request;
+ int res = 0;
+
+ g_return_val_if_fail(LASSO_IS_IDWSF2_DISCOVERY(discovery),
+ LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
+ g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+
+ res = lasso_wsf2_profile_process_soap_request_msg(LASSO_WSF2_PROFILE(discovery), message,
+ LASSO_IDWSF2_DISCO_HREF);
+ if (res != 0)
+ return res;
+
+ request = LASSO_DISCO_SVC_MD_REGISTER(LASSO_WSF2_PROFILE(discovery)->request);
+
+ if (request == NULL)
+ printf("\n\nrequest is NULL\n\n");
+
+ /* FIXME : foreach on the list instead */
+ if (request != NULL && request->metadata_list != NULL
+ && g_list_first(request->metadata_list) != NULL) {
+ discovery->metadata =
+ LASSO_DISCO_SERVICE_METADATA(g_list_first(request->metadata_list));
+ }
+
+ return 0;
+}
+
/*****************************************************************************/
/* private methods */
diff --git a/lasso/id-wsf-2.0/discovery.h b/lasso/id-wsf-2.0/discovery.h
index 133974a2..211ed0e9 100644
--- a/lasso/id-wsf-2.0/discovery.h
+++ b/lasso/id-wsf-2.0/discovery.h
@@ -30,9 +30,11 @@ extern "C" {
#endif /* __cplusplus */
+#include <lasso/id-wsf-2.0/wsf2_profile.h>
+
#include <lasso/xml/id-wsf-2.0/disco_query.h>
#include <lasso/xml/id-wsf-2.0/disco_query_response.h>
-#include <lasso/id-wsf-2.0/wsf2_profile.h>
+#include <lasso/xml/id-wsf-2.0/disco_service_metadata.h>
#define LASSO_TYPE_IDWSF2_DISCOVERY (lasso_idwsf2_discovery_get_type())
@@ -53,6 +55,9 @@ typedef struct _LassoIdwsf2DiscoveryPrivate LassoIdwsf2DiscoveryPrivate;
struct _LassoIdwsf2Discovery {
LassoWsf2Profile parent;
+ /* FIXME : Should be a list */
+ LassoDiscoServiceMetadata *metadata;
+
/*< private >*/
LassoIdwsf2DiscoveryPrivate *private_data;
};
@@ -67,12 +72,18 @@ LASSO_EXPORT LassoIdwsf2Discovery* lasso_idwsf2_discovery_new(LassoServer *serve
LASSO_EXPORT void lasso_idwsf2_discovery_destroy(LassoIdwsf2Discovery *discovery);
-LASSO_EXPORT gint lasso_idwsf2_discovery_init_query(LassoIdwsf2Discovery *discovery,
- const gchar *security_mech_id);
+LASSO_EXPORT gchar *lasso_idwsf2_discovery_get_metadata_dump(LassoIdwsf2Discovery *discovery);
LASSO_EXPORT gint lasso_idwsf2_discovery_init_metadata_register(LassoIdwsf2Discovery *discovery,
gchar *service_type, gchar *abstract, gchar *disco_provider_id);
+LASSO_EXPORT gint lasso_idwsf2_discovery_process_metadata_register_msg(
+ LassoIdwsf2Discovery *discovery, const gchar *message);
+
+LASSO_EXPORT gint lasso_idwsf2_discovery_init_query(LassoIdwsf2Discovery *discovery,
+ const gchar *security_mech_id);
+
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/lasso/id-wsf-2.0/wsf2_profile.c b/lasso/id-wsf-2.0/wsf2_profile.c
index 3b8f548a..55edbd03 100644
--- a/lasso/id-wsf-2.0/wsf2_profile.c
+++ b/lasso/id-wsf-2.0/wsf2_profile.c
@@ -146,6 +146,44 @@ lasso_wsf2_profile_build_soap_request_msg(LassoWsf2Profile *profile)
return 0;
}
+gint
+lasso_wsf2_profile_process_soap_request_msg(LassoWsf2Profile *profile, const gchar *message,
+ const gchar *service_type)
+{
+ LassoDiscoServiceInstance *si;
+ LassoSoapBindingCorrelation *correlation;
+ LassoSoapEnvelope *envelope = NULL;
+ LassoSoapFault *fault = NULL;
+ gchar *messageId;
+ int res = 0;
+ xmlDoc *doc;
+
+ g_return_val_if_fail(LASSO_IS_WSF2_PROFILE(profile),
+ LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
+ g_return_val_if_fail(message != NULL, LASSO_PARAM_ERROR_INVALID_VALUE);
+
+ si = lasso_server_get_service(profile->server, (char *) service_type);
+
+ doc = xmlParseMemory(message, strlen(message));
+
+ /* Get soap request and his message id */
+ envelope = LASSO_SOAP_ENVELOPE(lasso_node_new_from_xmlNode(xmlDocGetRootElement(doc)));
+
+ profile->request = LASSO_NODE(envelope->Body->any->data);
+ correlation = LASSO_SOAP_BINDING_CORRELATION(envelope->Header->Other->data);
+ messageId = correlation->messageID;
+
+ /* Set soap response */
+ envelope = lasso_wsf2_profile_build_soap_envelope(messageId,
+ LASSO_PROVIDER(profile->server)->ProviderID);
+ LASSO_WSF2_PROFILE(profile)->soap_envelope_response = envelope;
+
+ xmlFreeDoc(doc);
+
+ return res;
+}
+
+
/*****************************************************************************/
/* overrided parent class methods */
/*****************************************************************************/
diff --git a/lasso/id-wsf-2.0/wsf2_profile.h b/lasso/id-wsf-2.0/wsf2_profile.h
index f9fb53c4..2cbb5fb3 100644
--- a/lasso/id-wsf-2.0/wsf2_profile.h
+++ b/lasso/id-wsf-2.0/wsf2_profile.h
@@ -83,6 +83,9 @@ LASSO_EXPORT LassoSoapEnvelope* lasso_wsf2_profile_build_soap_envelope(const cha
LASSO_EXPORT gint lasso_wsf2_profile_build_soap_request_msg(LassoWsf2Profile *profile);
+LASSO_EXPORT gint lasso_wsf2_profile_process_soap_request_msg(LassoWsf2Profile *profile,
+ const gchar *message, const gchar *service_type);
+
#ifdef __cplusplus
}
#endif /* __cplusplus */