X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fpdu.c;h=5def0bc5d9041363b2bc833b5f50677750e5c517;hb=f694a287ae3de83e32f07771bd6257779494ecaa;hp=5dff51780d6b2edfe21ec5c03265c8515c810e07;hpb=108c622a9561676b4df437c318959f79e42d4675;p=deb_libnfs.git
diff --git a/lib/pdu.c b/lib/pdu.c
index 5dff517..5def0bc 100644
--- a/lib/pdu.c
+++ b/lib/pdu.c
@@ -14,21 +14,33 @@
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, see .
*/
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
#ifdef AROS
#include "aros_compat.h"
#endif
#ifdef WIN32
#include "win32_compat.h"
-#else
+#endif
+
+#ifdef HAVE_NETINET_IN_H
+#include
+#endif
+
+#ifdef HAVE_SYS_SOCKET_H
+#include
+#endif
+
+#ifdef HAVE_STRINGS_H
#include
-#endif/*WIN32*/
+#endif
#include
#include
#include
-#include
-#include
#include
#include
#include "slist.h"
@@ -71,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;
@@ -101,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)
{
@@ -164,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);
@@ -173,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;
@@ -218,7 +240,7 @@ int rpc_process_pdu(struct rpc_context *rpc, char *buf, int size)
struct rpc_pdu *pdu;
ZDR zdr;
int pos, recordmarker = 0;
- unsigned int xid;
+ uint32_t xid;
char *reasbuf = NULL;
assert(rpc->magic == RPC_CONTEXT_MAGIC);