Initial AROS support.
[deb_libnfs.git] / include / libnfs-private.h
index 29f04066a51dee23e2d10aa935ce9303f7656fb4..f153e35d9f063ac974bc2f56001e956880e79144 100644 (file)
    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/>.
 */
-#include <rpc/xdr.h>
-#include <rpc/auth.h>
+#ifdef HAVE_CONFIG_H
+#include "config.h"  /* HAVE_SOCKADDR_STORAGE ? */
+#endif
+
+#include <sys/socket.h>  /* struct sockaddr_storage */
+
+#include "libnfs-zdr.h"
+
+#ifndef HAVE_SOCKADDR_STORAGE
+/*
+ * RFC 2553: protocol-independent placeholder for socket addresses
+ */
+#define _SS_MAXSIZE    128
+#define _SS_ALIGNSIZE  (sizeof(double))
+#define _SS_PAD1SIZE   (_SS_ALIGNSIZE - sizeof(unsigned char) * 2)
+#define _SS_PAD2SIZE   (_SS_MAXSIZE - sizeof(unsigned char) * 2 - \
+                               _SS_PAD1SIZE - _SS_ALIGNSIZE)
+
+struct sockaddr_storage {
+#ifdef HAVE_SA_LEN
+       unsigned char ss_len;           /* address length */
+       unsigned char ss_family;        /* address family */
+#else
+       unsigned short ss_family;
+#endif
+       char    __ss_pad1[_SS_PAD1SIZE];
+       double  __ss_align;     /* force desired structure storage alignment */
+       char    __ss_pad2[_SS_PAD2SIZE];
+};
+#endif
+
 
 struct rpc_fragment {
        struct rpc_fragment *next;
@@ -23,7 +52,10 @@ struct rpc_fragment {
        char *data;
 };
 
+#define RPC_CONTEXT_MAGIC 0xc6e46435
+
 struct rpc_context {
+        uint32_t magic;
        int fd;
        int is_connected;
 
@@ -32,7 +64,7 @@ struct rpc_context {
        rpc_cb connect_cb;
        void *connect_data;
 
-       AUTH *auth;
+       struct AUTH *auth;
        unsigned long xid;
 
        /* buffer used for encoding RPC PDU */
@@ -43,8 +75,8 @@ struct rpc_context {
        struct sockaddr_storage udp_src;
        struct rpc_pdu *waitpdu;
 
-       int inpos;
-       int insize;
+       uint32_t inpos;
+       uint32_t insize;
        char *inbuf;
 
        /* special fields for UDP, which can sometimes be BROADCASTed */
@@ -64,21 +96,21 @@ struct rpc_pdu {
        struct rpc_pdu *next;
 
        unsigned long xid;
-       XDR xdr;
+       ZDR zdr;
 
-       int written;
+       uint32_t written;
        struct rpc_data outdata;
 
        rpc_cb cb;
        void *private_data;
 
-       /* function to decode the xdr reply data and buffer to decode into */
-       xdrproc_t xdr_decode_fn;
-       caddr_t xdr_decode_buf;
-       int xdr_decode_bufsize;
+       /* function to decode the zdr reply data and buffer to decode into */
+       zdrproc_t zdr_decode_fn;
+       caddr_t zdr_decode_buf;
+       uint32_t zdr_decode_bufsize;
 };
 
-struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int version, int procedure, rpc_cb cb, void *private_data, xdrproc_t xdr_decode_fn, int xdr_bufsize);
+struct rpc_pdu *rpc_allocate_pdu(struct rpc_context *rpc, int program, int version, int procedure, rpc_cb cb, void *private_data, zdrproc_t zdr_decode_fn, int zdr_bufsize);
 void rpc_free_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu);
 int rpc_queue_pdu(struct rpc_context *rpc, struct rpc_pdu *pdu);
 int rpc_get_pdu_size(char *buf);
@@ -88,7 +120,6 @@ void rpc_error_all_pdus(struct rpc_context *rpc, char *error);
 void rpc_set_error(struct rpc_context *rpc, char *error_string, ...);
 void nfs_set_error(struct nfs_context *nfs, char *error_string, ...);
 
-struct rpc_context *nfs_get_rpc_context(struct nfs_context *nfs);
 const char *nfs_get_server(struct nfs_context *nfs);
 const char *nfs_get_export(struct nfs_context *nfs);