diff options
author | Damien Laniel <dlaniel@entrouvert.com> | 2007-06-29 15:25:19 +0000 |
---|---|---|
committer | Damien Laniel <dlaniel@entrouvert.com> | 2007-06-29 15:25:19 +0000 |
commit | 1db332e9f8fff2b8a8b484fc9235f1280c2242f8 (patch) | |
tree | d43279e27a961adbbaabde1ff3741a9e742dfbe4 /lasso | |
parent | f7c23d191021bda3b16ec09651d5f16fabf8e073 (diff) | |
download | lasso-1db332e9f8fff2b8a8b484fc9235f1280c2242f8.tar.gz lasso-1db332e9f8fff2b8a8b484fc9235f1280c2242f8.tar.xz lasso-1db332e9f8fff2b8a8b484fc9235f1280c2242f8.zip |
added lasso.SOAP_FAULT_REDIRECT_REQUEST eception when WSP needs user consent + service.redirectUrl
Diffstat (limited to 'lasso')
-rw-r--r-- | lasso/id-wsf-2.0/data_service.c | 48 | ||||
-rw-r--r-- | lasso/id-wsf-2.0/data_service.h | 1 |
2 files changed, 48 insertions, 1 deletions
diff --git a/lasso/id-wsf-2.0/data_service.c b/lasso/id-wsf-2.0/data_service.c index 9d6ec960..d02f8834 100644 --- a/lasso/id-wsf-2.0/data_service.c +++ b/lasso/id-wsf-2.0/data_service.c @@ -255,6 +255,46 @@ lasso_idwsf2_data_service_parse_query_items(LassoIdWsf2DataService *service) return res; } +static gint +lasso_idwsf2_data_service_process_query_response_soap_fault_msg(LassoIdWsf2DataService *service, + const gchar *message) +{ + LassoIdWsf2Profile *profile = LASSO_IDWSF2_PROFILE(service); + LassoSoapFault *fault; + LassoIdWsf2SoapBinding2RedirectRequest *redirect_request = NULL; + GList *iter; + int res; + + if (! LASSO_IS_SOAP_FAULT(LASSO_PROFILE(profile)->response)) { + /* Should not happen as it should be checked in caller */ + return 0; + } + + fault = LASSO_SOAP_FAULT(LASSO_PROFILE(profile)->response); + + if (fault->Detail == NULL || fault->Detail->any == NULL) { + return LASSO_SOAP_ERROR_MISSING_SOAP_FAULT_DETAIL; + } + + /* Get RedirectRequest element from soap fault detail */ + for (iter = fault->Detail->any; iter != NULL; iter = iter->next) { + if (LASSO_IS_IDWSF2_SOAP_BINDING2_REDIRECT_REQUEST(iter->data) == TRUE) { + redirect_request = LASSO_IDWSF2_SOAP_BINDING2_REDIRECT_REQUEST(iter->data); + break; + } + } + + if (redirect_request != NULL) { + /* This is not a failure, this exception code indicates the WSP needs to ask */ + /* user consent to get an attribute */ + res = LASSO_SOAP_FAULT_REDIRECT_REQUEST; + /* Get redirect request url */ + service->redirect_url = g_strdup(redirect_request->redirectURL); + } + + return res; +} + gint lasso_idwsf2_data_service_process_query_response_msg(LassoIdWsf2DataService *service, const gchar *message) @@ -271,7 +311,13 @@ lasso_idwsf2_data_service_process_query_response_msg(LassoIdWsf2DataService *ser if (res != 0) { return res; } - + + /* Message can be either a SoapFault or a QueryResponse */ + if (LASSO_IS_SOAP_FAULT(LASSO_PROFILE(profile)->response)) { + return lasso_idwsf2_data_service_process_query_response_soap_fault_msg( + service, message); + } + if (! LASSO_IS_IDWSF2_DSTREF_QUERY_RESPONSE(LASSO_PROFILE(profile)->response)) { return LASSO_PROFILE_ERROR_INVALID_SOAP_MSG; } diff --git a/lasso/id-wsf-2.0/data_service.h b/lasso/id-wsf-2.0/data_service.h index 9553af83..08d81b19 100644 --- a/lasso/id-wsf-2.0/data_service.h +++ b/lasso/id-wsf-2.0/data_service.h @@ -58,6 +58,7 @@ struct _LassoIdWsf2DataService { /*< public >*/ xmlNode *data; gchar *type; + gchar *redirect_url; /*< private >*/ LassoIdWsf2DataServicePrivate *private_data; |