+ }
+ else if (!xmlStrcmp(method->name, BAD_CAST "updateResponse"))
+ {
+ xmlNodePtr ptr = method->children;
+ Z_SRW_updateResponse *res;
+
+ (*p)->which = Z_SRW_update_response;
+ res = (*p)->u.update_response = (Z_SRW_updateResponse *)
+ odr_malloc(o, sizeof(*res));
+
+ res->operationStatus = 0;
+ res->recordId = 0;
+ res->recordVersions = 0;
+ res->num_recordVersions = 0;
+ res->diagnostics = 0;
+ res->num_diagnostics = 0;
+ res->record = 0;
+ res->extra_record = 0;
+ res->extraResponseData_buf = 0;
+ res->extraResponseData_len = 0;
+
+ for (; ptr; ptr = ptr->next)
+ {
+ if (match_xsd_string(ptr, "version", o,
+ &(*p)->srw_version))
+ ;
+ else if (match_xsd_string(ptr, "operationStatus", o,
+ &res->operationStatus ))
+ ;
+ else if (match_xsd_string(ptr, "recordIdentifier", o,
+ &res->recordId))
+ ;
+ else if (match_element(ptr, "recordVersions" ))
+ yaz_srw_versions(o, ptr, &res->recordVersions,
+ &res->num_recordVersions,
+ client_data, ns_ucp_str);
+ else if (match_element(ptr, "record"))
+ {
+ res->record = yaz_srw_get_record(o);
+ yaz_srw_record(o, ptr, res->record, &res->extra_record,
+ client_data, ns_ucp_str);
+ }
+ else if (match_element(ptr, "diagnostics"))
+ yaz_srw_diagnostics(o, ptr, &res->diagnostics,
+ &res->num_diagnostics,
+ client_data, ns_ucp_str);
+ }
+ }
+ else if (!xmlStrcmp(method->name, BAD_CAST "explainUpdateRequest"))
+ {
+ }
+ else if (!xmlStrcmp(method->name, BAD_CAST "explainUpdateResponse"))
+ {
+ }
+ else
+ {
+ *p = 0;
+ return -1;
+ }
+ }
+ else if (o->direction == ODR_ENCODE)
+ {
+ Z_SRW_PDU **p = handler_data;
+ xmlNsPtr ns_ucp, ns_srw;
+
+
+ if ((*p)->which == Z_SRW_update_request)
+ {
+ Z_SRW_updateRequest *req = (*p)->u.update_request;
+ xmlNodePtr ptr = xmlNewChild(pptr, 0, BAD_CAST "updateRequest", 0);
+ ns_ucp = xmlNewNs(ptr, BAD_CAST ns_ucp_str, BAD_CAST "zu");
+ xmlSetNs(ptr, ns_ucp);
+ ns_srw = xmlNewNs(ptr, BAD_CAST ns_srw_str, BAD_CAST "zs");
+
+ add_xsd_string_ns(ptr, "version", (*p)->srw_version, ns_srw);
+ add_xsd_string(ptr, "action", req->operation);
+ add_xsd_string(ptr, "recordIdentifier", req->recordId );
+ if (req->recordVersions)
+ yaz_srw_versions( o, ptr, &req->recordVersions,
+ &req->num_recordVersions,
+ client_data, ns_ucp_str);
+ if (req->record && req->record->recordData_len)
+ {
+ xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "record", 0);
+ xmlSetNs(rptr, ns_srw);
+ yaz_srw_record(o, rptr, req->record, &req->extra_record,
+ client_data, ns_ucp_str);
+ }
+ if (req->extraRequestData_len)
+ {
+ add_XML_n(ptr, "extraRequestData",
+ req->extraRequestData_buf,
+ req->extraRequestData_len, ns_srw);
+ }
+ add_xsd_string(ptr, "stylesheet", req->stylesheet);
+ add_xsd_string(ptr, "database", req->database);
+ }
+ else if ((*p)->which == Z_SRW_update_response)
+ {
+ Z_SRW_updateResponse *res = (*p)->u.update_response;
+ xmlNodePtr ptr = xmlNewChild(pptr, 0, (xmlChar *)
+ "updateResponse", 0);
+ ns_ucp = xmlNewNs(ptr, BAD_CAST ns_ucp_str, BAD_CAST "zu");
+ xmlSetNs(ptr, ns_ucp);
+ ns_srw = xmlNewNs(ptr, BAD_CAST ns_srw_str, BAD_CAST "zs");
+
+ add_xsd_string_ns(ptr, "version", (*p)->srw_version, ns_srw);
+ add_xsd_string(ptr, "operationStatus", res->operationStatus );
+ add_xsd_string(ptr, "recordIdentifier", res->recordId );
+ if (res->recordVersions)
+ yaz_srw_versions(o, ptr, &res->recordVersions,
+ &res->num_recordVersions,
+ client_data, ns_ucp_str);
+ if (res->record && res->record->recordData_len)
+ {
+ xmlNodePtr rptr = xmlNewChild(ptr, 0, BAD_CAST "record", 0);
+ xmlSetNs(rptr, ns_srw);
+ yaz_srw_record(o, rptr, res->record, &res->extra_record,
+ client_data, ns_ucp_str);
+ }