diff options
| author | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-03-02 11:57:47 +0000 |
|---|---|---|
| committer | Benjamin Dauvergne <bdauvergne@entrouvert.com> | 2010-03-02 11:57:47 +0000 |
| commit | 412e3e9606e062013edcfa2a90ebca2df3470287 (patch) | |
| tree | b8ed390ae0608fb8cc1495c55fb9e51ef5f95598 | |
| parent | f47480a53bf2e0986d0eec9c1995f2b97d294802 (diff) | |
| download | lasso-412e3e9606e062013edcfa2a90ebca2df3470287.tar.gz lasso-412e3e9606e062013edcfa2a90ebca2df3470287.tar.xz lasso-412e3e9606e062013edcfa2a90ebca2df3470287.zip | |
ID-WSF 2.0: add service type to response, parse response before using it
| -rw-r--r-- | lasso/id-wsf-2.0/data_service.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/lasso/id-wsf-2.0/data_service.c b/lasso/id-wsf-2.0/data_service.c index 3c766a6f..c3aa1883 100644 --- a/lasso/id-wsf-2.0/data_service.c +++ b/lasso/id-wsf-2.0/data_service.c @@ -598,17 +598,35 @@ lasso_idwsf2_data_service_init_response(LassoIdWsf2DataService *service) LassoIdWsf2DstRefModifyResponse *modify_response; LassoNode *response = NULL; int rc = 0; + const char *service_type = NULL; + const char *prefix = NULL; lasso_bad_param(IDWSF2_DATA_SERVICE, service); lasso_check_good_rc(lasso_idwsf2_profile_init_response(&service->parent)); + if (service_type) { + const char *prefix = lasso_get_prefix_for_idwsf2_dst_service_href(service_type); + if (! prefix) + prefix = "dstref"; + } else { + service_type = service->private_data->service_type; + prefix = service->private_data->service_type_prefix; + } switch (lasso_idwsf2_data_service_get_request_type(service)) { case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY: query_response = lasso_idwsf2_dstref_query_response_new(); + if (service_type) { + lasso_idwsf2_data_service_set_dst_service_type(query_response, + service_type, prefix); + } response = (LassoNode*)query_response; break; case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_MODIFY: modify_response = lasso_idwsf2_dstref_modify_response_new(); + if (service_type) { + lasso_idwsf2_data_service_set_dst_service_type(modify_response, + service_type, prefix); + } response = (LassoNode*)modify_response; break; default: @@ -645,6 +663,10 @@ lasso_idwsf2_data_service_set_status_code(LassoIdWsf2DataService *service, LassoSoapFault *fault; int rc = 0; + + response = service->parent.parent.response; + if (! LASSO_IS_IDWSF2_UTIL_RESPONSE(response)) + return LASSO_PROFILE_ERROR_MISSING_RESPONSE; switch (lasso_idwsf2_data_service_get_request_type(service)) { case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY: status = &LASSO_IDWSF2_UTIL_RESPONSE(response)->Status; @@ -788,6 +810,8 @@ lasso_idwsf2_data_service_process_response_msg( lasso_bad_param(IDWSF2_DATA_SERVICE, service); + lasso_check_good_rc(lasso_idwsf2_profile_process_response_msg(&service->parent, msg)); + status = lasso_idwsf2_data_service_get_response_status(service); if (! status || ! status->code) { @@ -803,7 +827,6 @@ lasso_idwsf2_data_service_process_response_msg( rc = LASSO_IDWSF2_DST_ERROR_UNKNOWN_STATUS_CODE; } - lasso_check_good_rc(lasso_idwsf2_profile_process_response_msg(&service->parent, msg)); switch (lasso_idwsf2_data_service_get_request_type(service)) { case LASSO_IDWSF2_DATA_SERVICE_REQUEST_TYPE_QUERY: query_response = (LassoIdWsf2DstRefQueryResponse*)service->parent.parent.response; |
