- Z_IUOriginPartToKeep *toKeep;
- Z_IUSuppliedRecords *notToKeep;
- Z_External *r = (Z_External *)
- odr_malloc (p->odr_out, sizeof(*r));
-
- apdu->u.extendedServicesRequest->taskSpecificParameters = r;
-
- r->direct_reference =
- yaz_oidval_to_z3950oid(p->odr_out, CLASS_EXTSERV,
- VAL_DBUPDATE);
- r->descriptor = 0;
- r->which = Z_External_update;
- r->indirect_reference = 0;
- r->u.update = (Z_IUUpdate *)
- odr_malloc(p->odr_out, sizeof(*r->u.update));
-
- r->u.update->which = Z_IUUpdate_esRequest;
- r->u.update->u.esRequest = (Z_IUUpdateEsRequest *)
- odr_malloc(p->odr_out, sizeof(*r->u.update->u.esRequest));
- toKeep = r->u.update->u.esRequest->toKeep =
- (Z_IUOriginPartToKeep *)
- odr_malloc(p->odr_out, sizeof(*toKeep));
-
- toKeep->databaseName = odr_strdup(p->odr_out, first_db);
- toKeep->schema = 0;
- toKeep->elementSetName = 0;
- toKeep->actionQualifier = 0;
- toKeep->action = odr_intdup(p->odr_out, action_no);
-
- notToKeep = r->u.update->u.esRequest->notToKeep =
- (Z_IUSuppliedRecords *)
- odr_malloc(p->odr_out, sizeof(*notToKeep));
- notToKeep->num = 1;
- notToKeep->elements = (Z_IUSuppliedRecords_elem **)
- odr_malloc(p->odr_out, sizeof(*notToKeep->elements));
- notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *)
- odr_malloc(p->odr_out, sizeof(**notToKeep->elements));
- notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque;
- if (recordIdOpaque)
- {
- notToKeep->elements[0]->u.opaque = (Odr_oct *)
- odr_malloc (p->odr_out, sizeof(Odr_oct));
- notToKeep->elements[0]->u.opaque->size =
- notToKeep->elements[0]->u.opaque->len = strlen(recordIdOpaque);
- notToKeep->elements[0]->u.opaque->buf =
- odr_strdup(p->odr_out, recordIdOpaque);
- }
- else if (recordIdNumber)
- {
- notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_number;
-
- notToKeep->elements[0]->u.number =
- odr_intdup(p->odr_out, atoi(recordIdNumber));
- }
- else
- notToKeep->elements[0]->u.opaque = 0;
- notToKeep->elements[0]->supplementalId = 0;
- notToKeep->elements[0]->correlationInfo = 0;
- notToKeep->elements[0]->record =
- z_ext_record(p->odr_out, syntax_oid,
- record_buf, strlen(record_buf));
+ Z_IUOriginPartToKeep *toKeep;
+ Z_IUSuppliedRecords *notToKeep;
+ Z_External *r = (Z_External *)
+ odr_malloc(p->odr_out, sizeof(*r));
+ const char *elementSetName =
+ ZOOM_options_get(p->options, "elementSetName");
+
+ apdu->u.extendedServicesRequest->taskSpecificParameters = r;
+
+ r->direct_reference = odr_oiddup(p->odr_out, package_oid);
+ r->descriptor = 0;
+ r->which = Z_External_update;
+ r->indirect_reference = 0;
+ r->u.update = (Z_IUUpdate *)
+ odr_malloc(p->odr_out, sizeof(*r->u.update));
+
+ r->u.update->which = Z_IUUpdate_esRequest;
+ r->u.update->u.esRequest = (Z_IUUpdateEsRequest *)
+ odr_malloc(p->odr_out, sizeof(*r->u.update->u.esRequest));
+ toKeep = r->u.update->u.esRequest->toKeep =
+ (Z_IUOriginPartToKeep *)
+ odr_malloc(p->odr_out, sizeof(*toKeep));
+
+ toKeep->databaseName = odr_strdup(p->odr_out, first_db);
+ toKeep->schema = 0;
+
+ toKeep->elementSetName = odr_strdup_null(p->odr_out, elementSetName);
+
+ toKeep->actionQualifier = 0;
+ toKeep->action = odr_intdup(p->odr_out, action_no);
+
+ notToKeep = r->u.update->u.esRequest->notToKeep =
+ (Z_IUSuppliedRecords *)
+ odr_malloc(p->odr_out, sizeof(*notToKeep));
+ notToKeep->num = 1;
+ notToKeep->elements = (Z_IUSuppliedRecords_elem **)
+ odr_malloc(p->odr_out, sizeof(*notToKeep->elements));
+ notToKeep->elements[0] = (Z_IUSuppliedRecords_elem *)
+ odr_malloc(p->odr_out, sizeof(**notToKeep->elements));
+ notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_opaque;
+ if (recordIdOpaque)
+ {
+ notToKeep->elements[0]->u.opaque =
+ odr_create_Odr_oct(p->odr_out,
+ (const unsigned char *) recordIdOpaque,
+ recordIdOpaque_len);
+ }
+ else if (recordIdNumber)
+ {
+ notToKeep->elements[0]->which = Z_IUSuppliedRecords_elem_number;
+
+ notToKeep->elements[0]->u.number =
+ odr_intdup(p->odr_out, atoi(recordIdNumber));
+ }
+ else
+ notToKeep->elements[0]->u.opaque = 0;
+ notToKeep->elements[0]->supplementalId = 0;
+ if (correlationInfo_note || correlationInfo_id)
+ {
+ Z_IUCorrelationInfo *ci;
+ ci = notToKeep->elements[0]->correlationInfo =
+ (Z_IUCorrelationInfo *) odr_malloc(p->odr_out, sizeof(*ci));
+ ci->note = odr_strdup_null(p->odr_out, correlationInfo_note);
+ ci->id = correlationInfo_id ?
+ odr_intdup(p->odr_out, atoi(correlationInfo_id)) : 0;
+ }
+ else
+ notToKeep->elements[0]->correlationInfo = 0;
+ if (recordOpaque_buf)
+ {
+ notToKeep->elements[0]->record =
+ z_ext_record_oid_any(p->odr_out, syntax_oid,
+ recordOpaque_buf, recordOpaque_len);
+ }
+ else
+ {
+ notToKeep->elements[0]->record =
+ z_ext_record_oid(p->odr_out, syntax_oid,
+ record_buf, record_len);
+ }