}
-static Z_External *create_ItemOrderExternal(const char *type, int itemno, const char* document_name)
+static Z_External *create_ItemOrderExternal(const char *type, int itemno,
+ const char *xml_buf,
+ int xml_len)
{
Z_External *r = (Z_External *) odr_malloc(out, sizeof(Z_External));
r->direct_reference = odr_oiddup(out, yaz_oid_extserv_item_order);
}
else if (!strcmp(type, "xml") || !strcmp(type, "3"))
{
- printf("xml found \n");
-
- if( !document_name )
- {
- printf("no ducoument added \n");
- r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
- return r;
- };
+ printf("using XML ILL-request\n");
- char *xml_buf = NULL;
- int xml_len = 0;
-
- printf("reading from -%s-\n", document_name );
- if (parse_cmd_doc(&document_name, out, &xml_buf, &xml_len) == 0 )
+ if (!xml_buf)
{
- printf("Unable to read document\n");
+ printf("no docoument added\n");
r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
- return r;
- };
-
- r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
- z_ext_record_oid(out, yaz_oid_recsyn_xml, xml_buf, xml_len);
-
+ }
+ else
+ {
+ r->u.itemOrder->u.esRequest->notToKeep->itemRequest =
+ z_ext_record_oid(out, yaz_oid_recsyn_xml, xml_buf, xml_len);
+ }
}
else
r->u.itemOrder->u.esRequest->notToKeep->itemRequest = 0;
return r;
}
-static int send_itemorder(const char *type, int itemno, const char* document_name)
+static int send_itemorder(const char *type, int itemno,
+ const char *xml_buf, int xml_len)
{
Z_APDU *apdu = zget_APDU(out, Z_APDU_extendedServicesRequest);
Z_ExtendedServicesRequest *req = apdu->u.extendedServicesRequest;
req->packageType = odr_oiddup(out, yaz_oid_extserv_item_order);
req->packageName = esPackageName;
- req->taskSpecificParameters = create_ItemOrderExternal(type, itemno, document_name);
-
+ req->taskSpecificParameters = create_ItemOrderExternal(type, itemno,
+ xml_buf, xml_len);
send_apdu(apdu);
return 0;
}
{
char type[12];
int itemno;
- const char* filename = arg;
+ char *xml_buf = 0;
+ int xml_len = 0;
+ int no_read = 0;
if (only_z3950())
return 1;
- if (sscanf (arg, "%10s %d", type, &itemno) != 2)
+ if (sscanf(arg, "%10s %d%n", type, &itemno, &no_read) < 2)
return 0;
+ arg += no_read;
+ parse_cmd_doc(&arg, out, &xml_buf, &xml_len);
-
- filename+=strlen(type) + 1;
- while( *filename && *filename !=' ' ) filename++;
-
- printf("Item order request\n");
fflush(stdout);
- send_itemorder(type, itemno, filename);
+ send_itemorder(type, itemno, xml_buf, xml_len);
return 2;
}