summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDamien Laniel <dlaniel@entrouvert.com>2007-06-13 10:09:55 +0000
committerDamien Laniel <dlaniel@entrouvert.com>2007-06-13 10:09:55 +0000
commitbd0913130c776210e5ecc10d70fd665025447ec7 (patch)
tree12c817e83c48f7fc612e713cbc91d091483eed21
parent2726db1fb7a7c40b4e10cdf5b2bfb3ef47270dfa (diff)
better error handling + some refactoring
-rw-r--r--lasso/errors.c13
-rw-r--r--lasso/errors.h10
-rw-r--r--lasso/id-wsf-2.0/data_service.c53
-rw-r--r--lasso/id-wsf-2.0/discovery.c84
-rw-r--r--lasso/xml/strings.h6
-rw-r--r--swig/Lasso.i42
6 files changed, 146 insertions, 62 deletions
diff --git a/lasso/errors.c b/lasso/errors.c
index 53ea2c30..6df297b9 100644
--- a/lasso/errors.c
+++ b/lasso/errors.c
@@ -193,12 +193,19 @@ lasso_strerror(int error_code)
case LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_NAMESPACE:
return "Target name space not found";
- case LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED:
+ case LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED:
return "Service metadata registration failed";
- case LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED:
+ case LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED:
return "Service metadata association failed";
- case LASSO_IDWSF2_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE:
+ case LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE:
return "Missing requested service";
+ case LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE:
+ return "Failed to build Endpoint Reference";
+
+ case LASSO_DST_ERROR_QUERY_FAILED:
+ return "Query failed";
+ case LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED:
+ return "Query partially failed : some items were correctly processed";
default:
return "Error";
diff --git a/lasso/errors.h b/lasso/errors.h
index c310653f..6663ba42 100644
--- a/lasso/errors.h
+++ b/lasso/errors.h
@@ -144,10 +144,12 @@
#define LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY -1101
/* ID-WSF 2 Discovery */
-#define LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED -1200
-#define LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED -1201
-#define LASSO_IDWSF2_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE -1202
+#define LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED -1200
+#define LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED -1201
+#define LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE -1202
+#define LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE -1203
/* ID-WSF 2 Data Service */
-#define LASSO_IDWSF2_DST_QUERY_FAILED -1300
+#define LASSO_DST_ERROR_QUERY_FAILED -1300
+#define LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED -1301
diff --git a/lasso/id-wsf-2.0/data_service.c b/lasso/id-wsf-2.0/data_service.c
index 72d324e3..14ee09db 100644
--- a/lasso/id-wsf-2.0/data_service.c
+++ b/lasso/id-wsf-2.0/data_service.c
@@ -156,8 +156,9 @@ gint
lasso_idwsf2_data_service_build_query_response_msg(LassoIdWsf2DataService *service)
{
LassoWsf2Profile *profile = LASSO_WSF2_PROFILE(service);
- LassoIdWsf2DstRefQuery *request = LASSO_IDWSF2_DSTREF_QUERY(profile->request);
+ LassoIdWsf2DstRefQuery *request;
LassoIdWsf2DstRefQueryResponse *response;
+ LassoIdWsf2UtilResponse *response2;
LassoSoapEnvelope *envelope;
xmlDoc *doc;
xmlXPathContext *xpathCtx;
@@ -169,10 +170,16 @@ lasso_idwsf2_data_service_build_query_response_msg(LassoIdWsf2DataService *servi
LassoIdWsf2DstRefItemData *data_item;
xmlNode *node;
GList *iter;
+ int res = 0;
g_return_val_if_fail(LASSO_IS_IDWSF2_DATA_SERVICE(service),
LASSO_PARAM_ERROR_BAD_TYPE_OR_NULL_OBJ);
+ if (! LASSO_IS_IDWSF2_DSTREF_QUERY(profile->request)) {
+ return LASSO_PROFILE_ERROR_MISSING_REQUEST;
+ }
+ request = LASSO_IDWSF2_DSTREF_QUERY(profile->request);
+
/* Response envelope and body */
envelope = profile->soap_envelope_response;
response = lasso_idwsf2_dstref_query_response_new();
@@ -181,6 +188,10 @@ lasso_idwsf2_data_service_build_query_response_msg(LassoIdWsf2DataService *servi
profile->response = LASSO_NODE(response);
envelope->Body->any = g_list_append(envelope->Body->any, response);
+ response2 = LASSO_IDWSF2_UTIL_RESPONSE(response);
+ /* Default is Failed, will be OK or Partial when some items are successfully parsed */
+ response2->Status = lasso_util_status_new(LASSO_DST_STATUS_CODE_FAILED);
+
/* Initialise XML parsing */
doc = xmlNewDoc((xmlChar*)"1.0");
xmlDocSetRootElement(doc, service->data);
@@ -205,21 +216,41 @@ lasso_idwsf2_data_service_build_query_response_msg(LassoIdWsf2DataService *servi
data_item->itemIDRef = g_strdup(item_result_query_base->itemID);
}
response->Data = g_list_append(response->Data, data);
+ /* Success : change status code to OK */
+ if (strcmp(response2->Status->code, LASSO_DST_STATUS_CODE_FAILED) == 0) {
+ free(response2->Status->code);
+ response2->Status->code = g_strdup(LASSO_DST_STATUS_CODE_OK);
+ }
+ xmlXPathFreeObject(xpathObj);
+ xpathObj = NULL;
+ } else {
+ /* If status was OK, change it to Partial */
+ if (strcmp(response2->Status->code, LASSO_DST_STATUS_CODE_OK) == 0) {
+ free(response2->Status->code);
+ response2->Status->code = g_strdup(LASSO_DST_STATUS_CODE_PARTIAL);
+ } else {
+ res = LASSO_DST_ERROR_QUERY_FAILED;
+ }
+ if (xpathObj != NULL) {
+ xmlXPathFreeObject(xpathObj);
+ xpathObj = NULL;
+ }
+ /* Stop processing at first error */
+ break;
}
- xmlXPathFreeObject(xpathObj);
- xpathObj = NULL;
}
-
/* Free XML parsing objects */
xmlUnlinkNode(service->data);
xmlXPathFreeContext(xpathCtx);
xmlFreeDoc(doc);
- /* Response is built without any problem, status code is ok */
- LASSO_IDWSF2_UTIL_RESPONSE(response)->Status =
- lasso_util_status_new(LASSO_DST_STATUS_CODE_OK);
+ if (res == 0 && strcmp(response2->Status->code, LASSO_DST_STATUS_CODE_FAILED) == 0) {
+ res = LASSO_DST_ERROR_QUERY_FAILED;
+ }
+
+ lasso_wsf2_profile_build_response_msg(profile);
- return lasso_wsf2_profile_build_response_msg(profile);
+ return res;
}
gint
@@ -248,8 +279,10 @@ lasso_idwsf2_data_service_process_query_response_msg(LassoIdWsf2DataService *ser
if (response->Status == NULL || response->Status->code == NULL) {
return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE;
}
- if (strcmp(response->Status->code, "OK") != 0) {
- return LASSO_IDWSF2_DST_QUERY_FAILED;
+ if (strcmp(response->Status->code, LASSO_DST_STATUS_CODE_PARTIAL) == 0) {
+ return LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED;
+ } else if (strcmp(response->Status->code, LASSO_DST_STATUS_CODE_OK) != 0) {
+ return LASSO_DST_ERROR_QUERY_FAILED;
}
return 0;
diff --git a/lasso/id-wsf-2.0/discovery.c b/lasso/id-wsf-2.0/discovery.c
index 29fb92e9..a8b425d2 100644
--- a/lasso/id-wsf-2.0/discovery.c
+++ b/lasso/id-wsf-2.0/discovery.c
@@ -240,7 +240,7 @@ lasso_idwsf2_discovery_process_metadata_register_response_msg(LassoIdWsf2Discove
if (response->SvcMDID != NULL) {
discovery->svcMDID = g_strdup(response->SvcMDID->data);
} else {
- res = LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED;
+ res = LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED;
}
}
@@ -302,12 +302,11 @@ lasso_idwsf2_discovery_process_metadata_association_add_msg(LassoIdWsf2Discovery
/* Build response */
response = lasso_idwsf2_disco_svc_md_association_add_response_new();
- /* Default is Failed, will be OK when metadatas are registered */
- response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_FAILED);
-
envelope = profile->soap_envelope_response;
envelope->Body->any = g_list_append(envelope->Body->any, response);
+ profile->response = LASSO_NODE(response);
+
return res;
}
@@ -318,7 +317,6 @@ lasso_idwsf2_discovery_register_metadata(LassoIdWsf2Discovery *discovery)
LassoIdWsf2DiscoSvcMDAssociationAdd *request;
LassoIdWsf2DiscoSvcMDAssociationAddResponse *response;
LassoIdentity *identity;
- LassoSoapEnvelope *envelope;
GList *i;
int res = 0;
@@ -333,6 +331,8 @@ lasso_idwsf2_discovery_register_metadata(LassoIdWsf2Discovery *discovery)
if (! LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD(profile->request)) {
res = LASSO_PROFILE_ERROR_INVALID_SOAP_MSG;
+ } else if (! LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE(profile->response)) {
+ res = LASSO_PROFILE_ERROR_MISSING_RESPONSE;
}
/* If the request has been correctly processed, */
@@ -343,16 +343,12 @@ lasso_idwsf2_discovery_register_metadata(LassoIdWsf2Discovery *discovery)
lasso_identity_add_svc_md_id(identity, (gchar *)(i->data));
}
+ /* Set response status code */
+ response = LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE(profile->response);
if (res == 0) {
- envelope = profile->soap_envelope_response;
- for (i = g_list_first(envelope->Body->any); i != NULL; i = g_list_next(i)) {
- if (LASSO_IS_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE(i->data)) {
- response =
- LASSO_IDWSF2_DISCO_SVC_MD_ASSOCIATION_ADD_RESPONSE(i->data);
- response->Status->code = g_strdup(LASSO_DISCO_STATUS_CODE_OK);
- break;
- }
- }
+ response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_OK);
+ } else {
+ response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_FAILED);
}
return res;
@@ -386,7 +382,7 @@ lasso_idwsf2_discovery_process_metadata_association_add_response_msg(
return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE;
}
if (strcmp(response->Status->code, "OK") != 0) {
- return LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED;
+ return LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED;
}
return 0;
@@ -449,6 +445,27 @@ lasso_idwsf2_discovery_add_requested_service_type(LassoIdWsf2Discovery *discover
return 0;
}
+gint
+lasso_idwsf2_discovery_process_query_msg(LassoIdWsf2Discovery *discovery, const gchar *message)
+{
+ LassoWsf2Profile *profile = LASSO_WSF2_PROFILE(discovery);
+
+ 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);
+
+ /* Process request */
+ res = lasso_wsf2_profile_process_soap_request_msg(profile, message);
+
+ if (! LASSO_IS_IDWSF2_DISCO_QUERY(profile->request)) {
+ res = LASSO_PROFILE_ERROR_INVALID_SOAP_MSG;
+ }
+
+ return res;
+}
+
static LassoWsAddrEndpointReference*
lasso_idwsf2_discovery_build_query_response_epr(LassoIdWsf2DiscoRequestedService *service,
LassoIdentity *identity, LassoServer *server)
@@ -561,27 +578,6 @@ lasso_idwsf2_discovery_build_query_response_epr(LassoIdWsf2DiscoRequestedService
}
gint
-lasso_idwsf2_discovery_process_query_msg(LassoIdWsf2Discovery *discovery, const gchar *message)
-{
- LassoWsf2Profile *profile = LASSO_WSF2_PROFILE(discovery);
-
- 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);
-
- /* Process request */
- res = lasso_wsf2_profile_process_soap_request_msg(profile, message);
-
- if (! LASSO_IS_IDWSF2_DISCO_QUERY(profile->request)) {
- res = LASSO_PROFILE_ERROR_INVALID_SOAP_MSG;
- }
-
- return res;
-}
-
-gint
lasso_idwsf2_discovery_build_query_response_msg(LassoIdWsf2Discovery *discovery)
{
LassoWsf2Profile *profile = LASSO_WSF2_PROFILE(discovery);
@@ -608,7 +604,7 @@ lasso_idwsf2_discovery_build_query_response_msg(LassoIdWsf2Discovery *discovery)
request->RequestedService->data);
}
if (service == NULL) {
- res = LASSO_IDWSF2_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE;
+ res = LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE;
}
}
@@ -616,15 +612,21 @@ lasso_idwsf2_discovery_build_query_response_msg(LassoIdWsf2Discovery *discovery)
response = lasso_idwsf2_disco_query_response_new();
if (res == 0) {
- response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_OK);
/* FIXME : foreach here as well */
epr = lasso_idwsf2_discovery_build_query_response_epr(service, identity, server);
if (epr != NULL) {
response->EndpointReference =
g_list_append(response->EndpointReference, epr);
+ /* XXX : Should probably check if the epr contains a SecurityContext, */
+ /* otherwise return a "federation not found" error code */
+ } else {
+ res = LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE;
}
- /* XXX : Should probably check if the epr contains a SecurityContext, */
- /* otherwise return a "federation not found" error code */
+ }
+
+ /* Set response status code */
+ if (res == 0) {
+ response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_OK);
} else {
response->Status = lasso_util_status_new(LASSO_DISCO_STATUS_CODE_FAILED);
/* XXX : May add secondary status codes here */
@@ -669,7 +671,7 @@ lasso_idwsf2_discovery_process_query_response_msg(LassoIdWsf2Discovery *discover
return LASSO_PROFILE_ERROR_MISSING_STATUS_CODE;
}
if (strcmp(response->Status->code, "OK") != 0) {
- return LASSO_IDWSF2_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED;
+ return LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED;
}
/* If the response has been correctly processed, */
diff --git a/lasso/xml/strings.h b/lasso/xml/strings.h
index e14e66fb..ba533429 100644
--- a/lasso/xml/strings.h
+++ b/lasso/xml/strings.h
@@ -199,6 +199,9 @@
#define LASSO_DISCO_STATUS_CODE_NO_RESULTS "NoResults"
#define LASSO_DISCO_STATUS_CODE_DIRECTIVES "Directive"
+#define LASSO_DST_STATUS_CODE_OK "OK"
+#define LASSO_DST_STATUS_CODE_FAILED "Failed"
+#define LASSO_DST_STATUS_CODE_PARTIAL "Partial"
#define LASSO_DST_STATUS_CODE_ACTION_NOT_AUTHORIZED "ActionNotAuthorized"
#define LASSO_DST_STATUS_CODE_ACTION_NOT_SUPPORTED "ActionNotSupported"
#define LASSO_DST_STATUS_CODE_ALL_RETURNED "AllReturned"
@@ -218,13 +221,12 @@
#define LASSO_DST_STATUS_CODE_NO_MORE_ELEMENTS "NoMoreElements"
#define LASSO_DST_STATUS_CODE_NO_MULTIPLE_ALLOWED "NoMultipleAllowed"
#define LASSO_DST_STATUS_CODE_NO_MULTIPLE_RESOURCES "NoMultipleResources"
-#define LASSO_DST_STATUS_CODE_OK "OK"
#define LASSO_DST_STATUS_CODE_TIME_OUT "TimeOut"
#define LASSO_DST_STATUS_CODE_UNEXPECTED_ERROR "UnexpectedError"
+#define LASSO_SA_STATUS_CODE_OK "OK"
#define LASSO_SA_STATUS_CODE_CONTINUE "continue"
#define LASSO_SA_STATUS_CODE_ABORT "abort"
-#define LASSO_SA_STATUS_CODE_OK "OK"
/*****************************************************************************/
/* METADATA */
diff --git a/swig/Lasso.i b/swig/Lasso.i
index b6177c10..b642a64d 100644
--- a/swig/Lasso.i
+++ b/swig/Lasso.i
@@ -1104,7 +1104,8 @@ typedef enum {
%rename(SERVER_ERROR_ADD_PROVIDER_FAILED) LASSO_SERVER_ERROR_ADD_PROVIDER_FAILED;
%rename(SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH) \
LASSO_SERVER_ERROR_ADD_PROVIDER_PROTOCOL_MISMATCH;
-%rename(SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED) LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED;
+%rename(SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED) \
+ LASSO_SERVER_ERROR_SET_ENCRYPTION_PRIVATE_KEY_FAILED;
#endif
/* Single Logout */
@@ -1150,6 +1151,11 @@ typedef enum {
%rename(PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY) \
LASSO_PROFILE_ERROR_MISSING_ENCRYPTION_PRIVATE_KEY;
%rename(PROFILE_ERROR_STATUS_NOT_SUCCESS) LASSO_PROFILE_ERROR_STATUS_NOT_SUCCESS;
+%rename(PROFILE_ERROR_MISSING_ISSUER) LASSO_PROFILE_ERROR_MISSING_ISSUER;
+%rename(PROFILE_ERROR_MISSING_SERVICE_INSTANCE) LASSO_PROFILE_ERROR_MISSING_SERVICE_INSTANCE;
+%rename(PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE) LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE;
+%rename(PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS) \
+ LASSO_PROFILE_ERROR_MISSING_ENDPOINT_REFERENCE_ADDRESS;
#endif
/* functions/methods parameters checking */
@@ -1175,12 +1181,15 @@ typedef enum {
/* Federation Termination Notification */
#ifndef SWIG_PHP_RENAMES
-%rename(DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER) LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER;
+%rename(DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER) \
+ LASSO_DEFEDERATION_ERROR_MISSING_NAME_IDENTIFIER;
#endif
/* Soap */
#ifndef SWIG_PHP_RENAMES
%rename(SOAP_FAULT_REDIRECT_REQUEST) LASSO_SOAP_FAULT_REDIRECT_REQUEST;
+%rename(SOAP_ERROR_MISSING_HEADER) LASSO_SOAP_ERROR_MISSING_HEADER;
+%rename(SOAP_ERROR_MISSING_BODY) LASSO_SOAP_ERROR_MISSING_BODY;
#endif
/* Name Identifier Mapping */
@@ -1193,6 +1202,35 @@ typedef enum {
LASSO_NAME_IDENTIFIER_MAPPING_ERROR_MISSING_TARGET_IDENTIFIER;
#endif
+/* Data Service */
+#ifndef SWIG_PHP_RENAMES
+%rename(DATA_SERVICE_ERROR_UNREGISTERED_DST) LASSO_DATA_SERVICE_ERROR_UNREGISTERED_DST;
+#endif
+
+/* WSF Profile */
+#ifndef SWIG_PHP_RENAMES
+%rename(WSF_PROFILE_ERROR_MISSING_CORRELATION) LASSO_WSF_PROFILE_ERROR_MISSING_CORRELATION;
+%rename(WSF_PROFILE_ERROR_MISSING_SECURITY) LASSO_WSF_PROFILE_ERROR_MISSING_SECURITY;
+#endif
+
+/* ID-WSF 2 Discovery */
+#ifndef SWIG_PHP_RENAMES
+%rename(DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED) \
+ LASSO_DISCOVERY_ERROR_SVC_METADATA_REGISTER_FAILED;
+%rename(DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED) \
+ LASSO_DISCOVERY_ERROR_SVC_METADATA_ASSOCIATION_ADD_FAILED;
+%rename(DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE) \
+ LASSO_DISCOVERY_ERROR_MISSING_REQUESTED_SERVICE;
+%rename(DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE) \
+ LASSO_DISCOVERY_ERROR_FAILED_TO_BUILD_ENDPOINT_REFERENCE;
+#endif
+
+/* ID-WSF 2 Data Service */
+#ifndef SWIG_PHP_RENAMES
+%rename(DST_ERROR_QUERY_FAILED) LASSO_DST_ERROR_QUERY_FAILED;
+%rename(DST_ERROR_QUERY_PARTIALLY_FAILED) LASSO_DST_ERROR_QUERY_PARTIALLY_FAILED;
+#endif
+
#ifndef SWIG_PHP_RENAMES
%rename(strerror) lasso_strerror;
#endif