Add configure checks for sys/socket.h
[deb_libnfs.git] / lib / pdu.c
index 597b44cf8f8d119db53effa6e56a5cb8149ea46f..d25c448caef0cc855ef6b52594cf6e1f22a43650 100644 (file)
--- a/lib/pdu.c
+++ b/lib/pdu.c
    You should have received a copy of the GNU Lesser General Public License
    along with this program; if not, see <http://www.gnu.org/licenses/>.
 */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef AROS
+#include "aros_compat.h"
+#endif
+
 #ifdef WIN32
 #include "win32_compat.h"
-#ifndef MSG_DONTWAIT
-#define MSG_DONTWAIT 0
-#endif
 #else
 #include <strings.h>
 #endif/*WIN32*/
 
+#ifdef HAVE_NETINET_IN_H
+#include <netinet/in.h>
+#endif
+
+#ifdef HAVE_SYS_SOCKET_H
+#include <sys/socket.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
+#include <assert.h>
 #include <errno.h>
 #include "slist.h"
 #include "libnfs-zdr.h"
@@ -40,9 +52,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 +72,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 +91,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 +116,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 +164,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 +180,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 +192,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 +231,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);