X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fpdu.c;h=5def0bc5d9041363b2bc833b5f50677750e5c517;hb=2c0f57fa33371a55b798a9cca14a3d58e6b3cb26;hp=8de51d2fb56025ea7750f84f7126afd5b412eb58;hpb=b93082da2b96a2751f9d7566ad5ec42415080c4b;p=deb_libnfs.git diff --git a/lib/pdu.c b/lib/pdu.c index 8de51d2..5def0bc 100644 --- a/lib/pdu.c +++ b/lib/pdu.c @@ -83,8 +83,9 @@ struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int versi msg.body.cbody.cred = rpc->auth->ah_cred; msg.body.cbody.verf = rpc->auth->ah_verf; - if (zdr_callmsg(&pdu->zdr, &msg) == 0) { - rpc_set_error(rpc, "zdr_callmsg failed"); + if (zdr_callmsg(rpc, &pdu->zdr, &msg) == 0) { + rpc_set_error(rpc, "zdr_callmsg failed with %s", + rpc_get_error(rpc)); zdr_destroy(&pdu->zdr); free(pdu); return NULL; @@ -113,6 +114,10 @@ void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu) free(pdu); } +void rpc_set_next_xid(struct rpc_context *rpc, uint32_t xid) +{ + rpc->xid = xid; +} int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu) { @@ -176,8 +181,11 @@ static int rpc_process_reply(struct rpc_context *rpc, struct rpc_pdu *pdu, ZDR * } pdu->zdr_decode_buf = malloc(pdu->zdr_decode_bufsize); if (pdu->zdr_decode_buf == NULL) { - rpc_set_error(rpc, "zdr_replymsg failed in portmap_getport_reply"); - pdu->cb(rpc, RPC_STATUS_ERROR, "Failed to allocate buffer for decoding of ZDR reply", pdu->private_data); + rpc_set_error(rpc, "Failed to allocate memory for " + "zdr_encode_buf in rpc_process_reply"); + pdu->cb(rpc, RPC_STATUS_ERROR, "Failed to allocate " + "buffer for decoding of ZDR reply", + pdu->private_data); return 0; } memset(pdu->zdr_decode_buf, 0, pdu->zdr_decode_bufsize); @@ -185,9 +193,11 @@ static int rpc_process_reply(struct rpc_context *rpc, struct rpc_pdu *pdu, ZDR * msg.body.rbody.reply.areply.reply_data.results.where = pdu->zdr_decode_buf; msg.body.rbody.reply.areply.reply_data.results.proc = pdu->zdr_decode_fn; - if (zdr_replymsg(zdr, &msg) == 0) { - rpc_set_error(rpc, "zdr_replymsg failed in portmap_getport_reply"); - pdu->cb(rpc, RPC_STATUS_ERROR, "Message rejected by server", pdu->private_data); + if (zdr_replymsg(rpc, zdr, &msg) == 0) { + rpc_set_error(rpc, "zdr_replymsg failed in rpc_process_reply: " + "%s", rpc_get_error(rpc)); + pdu->cb(rpc, RPC_STATUS_ERROR, "Message rejected by server", + pdu->private_data); if (pdu->zdr_decode_buf != NULL) { free(pdu->zdr_decode_buf); pdu->zdr_decode_buf = NULL;