X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=src%2Fzoom-z3950.c;h=3d603ef23ff225b82eb950afdba6b896358f9f5e;hp=a8cf99bbf736dc3f8a4fceaa17748b1c94873645;hb=77c5a4fca8b516fd39b8ba213daed17a465a6b2a;hpb=86878f261a0679ae4cbddad2f8eb3208722e2e3b diff --git a/src/zoom-z3950.c b/src/zoom-z3950.c index a8cf99b..3d603ef 100644 --- a/src/zoom-z3950.c +++ b/src/zoom-z3950.c @@ -1,5 +1,5 @@ /* This file is part of the YAZ toolkit. - * Copyright (C) 1995-2011 Index Data + * Copyright (C) 1995-2012 Index Data * See the file LICENSE for details. */ /** @@ -539,6 +539,8 @@ static int encode_APDU(ZOOM_connection c, Z_APDU *a, ODR out) } if (c->odr_print) z_APDU(c->odr_print, &a, 0, 0); + if (c->odr_save) + z_APDU(c->odr_save, &a, 0, 0); yaz_log(c->log_details, "%p encoding_APDU encoding OK", c); return 0; } @@ -991,63 +993,60 @@ static void response_diag(ZOOM_connection c, Z_DiagRec *p) } static int es_response_taskpackage_update(ZOOM_connection c, - Z_IUUpdateTaskPackage *utp) + Z_IUUpdateTaskPackage *utp) { - if (utp && utp->targetPart) - { - Z_IUTargetPart *targetPart = utp->targetPart; - switch ( *targetPart->updateStatus ) { - case Z_IUTargetPart_success: - ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "success"); - break; - case Z_IUTargetPart_partial: - ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "partial"); - break; - case Z_IUTargetPart_failure: - ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "failure"); - if (targetPart->globalDiagnostics && targetPart->num_globalDiagnostics > 0) - response_diag(c, targetPart->globalDiagnostics[0]); - break; - } - // NOTE: Individual record status, surrogate diagnostics, and supplemental diagnostics ARE NOT REPORTED. - } + if (utp && utp->targetPart) + { + Z_IUTargetPart *targetPart = utp->targetPart; + switch ( *targetPart->updateStatus ) { + case Z_IUTargetPart_success: + ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "success"); + break; + case Z_IUTargetPart_partial: + ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "partial"); + break; + case Z_IUTargetPart_failure: + ZOOM_options_set(c->tasks->u.package->options,"updateStatus", "failure"); + if (targetPart->globalDiagnostics && targetPart->num_globalDiagnostics > 0) + response_diag(c, targetPart->globalDiagnostics[0]); + break; + } + /* NOTE: Individual record status, surrogate diagnostics, and supplemental diagnostics ARE NOT REPORTED. */ + } return 1; } static int es_response_taskpackage(ZOOM_connection c, Z_TaskPackage *taskPackage) { - // targetReference - Odr_oct *id = taskPackage->targetReference; - if (id) - ZOOM_options_setl(c->tasks->u.package->options, - "targetReference", (char*) id->buf, id->len); - - // taskStatus - switch ( *taskPackage->taskStatus ) { - case Z_TaskPackage_pending: - ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "pending"); - break; - case Z_TaskPackage_active: - ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "active"); - break; - case Z_TaskPackage_complete: - ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "complete"); - break; - case Z_TaskPackage_aborted: - ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "aborted"); - if ( taskPackage->num_packageDiagnostics && taskPackage->packageDiagnostics ) - response_diag(c, taskPackage->packageDiagnostics[0]); - break; - } - - // taskSpecificParameters - // NOTE: Only Update implemented, no others. - if ( taskPackage->taskSpecificParameters->which == Z_External_update ) { - Z_IUUpdateTaskPackage *utp = taskPackage->taskSpecificParameters->u.update->u.taskPackage; - es_response_taskpackage_update(c, utp); - } - return 1; + Odr_oct *id = taskPackage->targetReference; + if (id) + ZOOM_options_setl(c->tasks->u.package->options, + "targetReference", (char*) id->buf, id->len); + + switch ( *taskPackage->taskStatus ) { + case Z_TaskPackage_pending: + ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "pending"); + break; + case Z_TaskPackage_active: + ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "active"); + break; + case Z_TaskPackage_complete: + ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "complete"); + break; + case Z_TaskPackage_aborted: + ZOOM_options_set(c->tasks->u.package->options,"taskStatus", "aborted"); + if ( taskPackage->num_packageDiagnostics && taskPackage->packageDiagnostics ) + response_diag(c, taskPackage->packageDiagnostics[0]); + break; + } + /* NOTE: Only Update implemented, no others. */ + if ( taskPackage->taskSpecificParameters->which == Z_External_update ) + { + Z_IUUpdateTaskPackage *utp = taskPackage->taskSpecificParameters->u.update->u.taskPackage; + es_response_taskpackage_update(c, utp); + } + return 1; } @@ -1056,18 +1055,19 @@ static int handle_Z3950_es_response(ZOOM_connection c, { if (!c->tasks || c->tasks->which != ZOOM_TASK_PACKAGE) return 0; - switch (*res->operationStatus) { - case Z_ExtendedServicesResponse_done: - ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "done"); - break; - case Z_ExtendedServicesResponse_accepted: - ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "accepted"); - break; - case Z_ExtendedServicesResponse_failure: - ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "failure"); - if (res->diagnostics && res->num_diagnostics > 0) - response_diag(c, res->diagnostics[0]); - break; + switch (*res->operationStatus) + { + case Z_ExtendedServicesResponse_done: + ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "done"); + break; + case Z_ExtendedServicesResponse_accepted: + ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "accepted"); + break; + case Z_ExtendedServicesResponse_failure: + ZOOM_options_set(c->tasks->u.package->options,"operationStatus", "failure"); + if (res->diagnostics && res->num_diagnostics > 0) + response_diag(c, res->diagnostics[0]); + break; } if (res->taskPackage && res->taskPackage->which == Z_External_extendedService) @@ -1768,7 +1768,7 @@ void ZOOM_handle_Z3950_apdu(ZOOM_connection c, Z_APDU *apdu) yaz_log(c->log_api, "%p handle_Z3950_apdu Close PDU", c); if (!ZOOM_test_reconnect(c)) { - ZOOM_set_error(c, ZOOM_ERROR_CONNECTION_LOST, c->host_port); + ZOOM_set_dset_error(c, ZOOM_ERROR_CONNECTION_LOST, "ZOOM", c->host_port, apdu->u.close->diagnosticInformation); ZOOM_connection_close(c); } break;