X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fpdu.c;h=3d8fecaaaefc738467f34253db8fb2dbfb47f5bb;hb=67a9f57e67c3b2c147969c752532fd55eb99259c;hp=597b44cf8f8d119db53effa6e56a5cb8149ea46f;hpb=574095b9604d8e61b531d61343e1f2719767f50d;p=deb_libnfs.git
diff --git a/lib/pdu.c b/lib/pdu.c
index 597b44c..3d8feca 100644
--- a/lib/pdu.c
+++ b/lib/pdu.c
@@ -14,20 +14,22 @@
You should have received a copy of the GNU Lesser General Public License
along with this program; if not, see .
*/
+#ifdef AROS
+#include "aros_compat.h"
+#endif
+
#ifdef WIN32
#include "win32_compat.h"
-#ifndef MSG_DONTWAIT
-#define MSG_DONTWAIT 0
-#endif
#else
#include
+#include
+#include
#endif/*WIN32*/
#include
#include
#include
-#include
-#include
+#include
#include
#include "slist.h"
#include "libnfs-zdr.h"
@@ -40,9 +42,7 @@ struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int versi
struct rpc_pdu *pdu;
struct rpc_msg msg;
- if (rpc == NULL) {
- return NULL;
- }
+ assert(rpc->magic == RPC_CONTEXT_MAGIC);
pdu = malloc(sizeof(struct rpc_pdu));
if (pdu == NULL) {
@@ -62,14 +62,14 @@ struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int versi
}
memset(&msg, 0, sizeof(struct rpc_msg));
- msg.rm_xid = pdu->xid;
- msg.rm_direction = CALL;
- msg.rm_call.cb_rpcvers = RPC_MSG_VERSION;
- msg.rm_call.cb_prog = program;
- msg.rm_call.cb_vers = version;
- msg.rm_call.cb_proc = procedure;
- msg.rm_call.cb_cred = rpc->auth->ah_cred;
- msg.rm_call.cb_verf = rpc->auth->ah_verf;
+ msg.xid = pdu->xid;
+ msg.direction = CALL;
+ msg.body.cbody.rpcvers = RPC_MSG_VERSION;
+ msg.body.cbody.prog = program;
+ msg.body.cbody.vers = version;
+ msg.body.cbody.proc = procedure;
+ 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");
@@ -81,8 +81,10 @@ struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int versi
return pdu;
}
-void rpc_free_pdu(struct rpc_context *rpc _U_, struct rpc_pdu *pdu)
+void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
{
+ assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
if (pdu->outdata.data != NULL) {
free(pdu->outdata.data);
pdu->outdata.data = NULL;
@@ -104,6 +106,8 @@ int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu)
{
int size, recordmarker;
+ assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
size = zdr_getpos(&pdu->zdr);
/* for udp we dont queue, we just send it straight away */
@@ -150,8 +154,10 @@ static int rpc_process_reply(struct rpc_context *rpc, struct rpc_pdu *pdu, ZDR *
{
struct rpc_msg msg;
+ assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
memset(&msg, 0, sizeof(struct rpc_msg));
- msg.acpted_rply.ar_verf = _null_auth;
+ msg.body.rbody.reply.areply.verf = _null_auth;
if (pdu->zdr_decode_bufsize > 0) {
if (pdu->zdr_decode_buf != NULL) {
free(pdu->zdr_decode_buf);
@@ -164,8 +170,8 @@ static int rpc_process_reply(struct rpc_context *rpc, struct rpc_pdu *pdu, ZDR *
}
memset(pdu->zdr_decode_buf, 0, pdu->zdr_decode_bufsize);
}
- msg.acpted_rply.ar_results.where = pdu->zdr_decode_buf;
- msg.acpted_rply.ar_results.proc = pdu->zdr_decode_fn;
+ 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");
@@ -176,11 +182,11 @@ static int rpc_process_reply(struct rpc_context *rpc, struct rpc_pdu *pdu, ZDR *
}
return 0;
}
- if (msg.rm_reply.rp_stat != MSG_ACCEPTED) {
+ if (msg.body.rbody.stat != MSG_ACCEPTED) {
pdu->cb(rpc, RPC_STATUS_ERROR, "RPC Packet not accepted by the server", pdu->private_data);
return 0;
}
- switch (msg.rm_reply.rp_acpt.ar_stat) {
+ switch (msg.body.rbody.reply.areply.stat) {
case SUCCESS:
pdu->cb(rpc, RPC_STATUS_SUCCESS, pdu->zdr_decode_buf, pdu->private_data);
break;
@@ -215,6 +221,8 @@ int rpc_process_pdu(struct rpc_context *rpc, char *buf, int size)
unsigned int xid;
char *reasbuf = NULL;
+ assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
memset(&zdr, 0, sizeof(ZDR));
zdrmem_create(&zdr, buf, size, ZDR_DECODE);