diff options
author | Damien Laniel <dlaniel@entrouvert.com> | 2007-04-11 12:04:19 +0000 |
---|---|---|
committer | Damien Laniel <dlaniel@entrouvert.com> | 2007-04-11 12:04:19 +0000 |
commit | c82cc5c950c61b8073531168acab1fd6dca07870 (patch) | |
tree | 1b5b8fd8906256e24367d66f5afab120a4b6789b /lasso/id-wsf-2.0 | |
parent | 8f0c0a866ed6a13f9e68691af144eb2f78f0cdc7 (diff) | |
download | lasso-c82cc5c950c61b8073531168acab1fd6dca07870.tar.gz lasso-c82cc5c950c61b8073531168acab1fd6dca07870.tar.xz lasso-c82cc5c950c61b8073531168acab1fd6dca07870.zip |
implementing lasso_idwsf2_discovery_process_metadata_register_msg, not working yet
Diffstat (limited to 'lasso/id-wsf-2.0')
-rw-r--r-- | lasso/id-wsf-2.0/discovery.c | 42 | ||||
-rw-r--r-- | lasso/id-wsf-2.0/discovery.h | 17 | ||||
-rw-r--r-- | lasso/id-wsf-2.0/wsf2_profile.c | 38 | ||||
-rw-r--r-- | lasso/id-wsf-2.0/wsf2_profile.h | 3 |
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 */ |