+static Z_APDU *process_sortRequest(association *assoc, request *reqb,
+ int *fd)
+{
+ Z_SortRequest *req = reqb->request->u.sortRequest;
+ Z_SortResponse *res = odr_malloc (assoc->encode, sizeof(*res));
+ bend_sortrequest bsrq;
+ bend_sortresult *bsrt;
+ Z_APDU *apdu = odr_malloc (assoc->encode, sizeof(*apdu));
+
+ logf(LOG_LOG, "Got SortRequest.");
+
+ bsrq.num_input_setnames = req->inputResultSetNames->num_strings;
+ bsrq.input_setnames = req->inputResultSetNames->strings;
+ bsrq.output_setname = req->sortedResultSetName;
+ bsrq.sort_sequence = req->sortSequence;
+ bsrq.stream = assoc->encode;
+
+ bsrt = odr_malloc (assoc->encode, sizeof(*bsrt));
+ bsrt->sort_status = Z_SortStatus_failure;
+ bsrt->errcode = 0;
+ bsrt->errstring = 0;
+
+ (*assoc->bend_sort)(assoc->backend, &bsrq, bsrt);
+
+ res->referenceId = req->referenceId;
+ res->sortStatus = odr_malloc (assoc->encode, sizeof(*res->sortStatus));
+ *res->sortStatus = bsrt->sort_status;
+ res->resultSetStatus = 0;
+ if (bsrt->errcode)
+ res->diagnostics = diagrecs(assoc, bsrt->errcode, bsrt->errstring);
+ res->otherInfo = 0;
+
+ apdu->which = Z_APDU_sortResponse;
+ apdu->u.sortResponse = res;
+ return apdu;
+}
+