Initial AROS support.
[deb_libnfs.git] / lib / socket.c
index 32c09457c09b9189bf9c4bf65542dc4f860cd886..1dbbdeae5eb5c21758f5e1c7789765f706706d71 100644 (file)
@@ -18,7 +18,6 @@
 #include "win32_compat.h"
 #else
 #include <unistd.h>
-#include <poll.h>
 #include <arpa/inet.h>
 #include <sys/ioctl.h>
 #include <sys/socket.h>
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
+
+#ifdef AROS
+#include "aros_compat.h"
+#endif
+
+#ifdef HAVE_POLL_H
+#include <poll.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h>
+#include <assert.h>
 #include <fcntl.h>
 #include <string.h>
 #include <errno.h>
@@ -69,12 +78,18 @@ static void set_nonblocking(int fd)
 
 int rpc_get_fd(struct rpc_context *rpc)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        return rpc->fd;
 }
 
 int rpc_which_events(struct rpc_context *rpc)
 {
-       int events = rpc->is_connected ? POLLIN : POLLOUT;
+       int events;
+
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
+       events = rpc->is_connected ? POLLIN : POLLOUT;
 
        if (rpc->is_udp != 0) {
                /* for udp sockets we only wait for pollin */
@@ -91,9 +106,8 @@ static int rpc_write_to_socket(struct rpc_context *rpc)
 {
        int32_t count;
 
-       if (rpc == NULL) {
-               return -1;
-       }
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (rpc->fd == -1) {
                rpc_set_error(rpc, "trying to write but not connected");
                return -1;
@@ -135,6 +149,10 @@ static int rpc_read_from_socket(struct rpc_context *rpc)
        int pdu_size;
        int32_t count;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
 #if defined(WIN32)
        if (ioctlsocket(rpc->fd, FIONREAD, &available) != 0) {
 #else
@@ -257,6 +275,8 @@ static int rpc_read_from_socket(struct rpc_context *rpc)
 
 int rpc_service(struct rpc_context *rpc, int revents)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (revents & POLLERR) {
 #ifdef WIN32
                char err = 0;
@@ -335,11 +355,15 @@ int rpc_service(struct rpc_context *rpc, int revents)
 
 void rpc_set_autoreconnect(struct rpc_context *rpc)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        rpc->auto_reconnect = 1;
 }
 
 void rpc_unset_autoreconnect(struct rpc_context *rpc)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        rpc->auto_reconnect = 0;
 }
 
@@ -347,6 +371,8 @@ static int rpc_connect_sockaddr_async(struct rpc_context *rpc, struct sockaddr_s
 {
        int socksize;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        switch (s->ss_family) {
        case AF_INET:
                socksize = sizeof(struct sockaddr_in);
@@ -423,6 +449,8 @@ int rpc_connect_async(struct rpc_context *rpc, const char *server, int port, rpc
 {
        struct sockaddr_in *sin = (struct sockaddr_in *)&rpc->s;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (rpc->fd != -1) {
                rpc_set_error(rpc, "Trying to connect while already connected");
                return -1;
@@ -463,6 +491,8 @@ int rpc_connect_async(struct rpc_context *rpc, const char *server, int port, rpc
 
 int rpc_disconnect(struct rpc_context *rpc, char *error)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        rpc_unset_autoreconnect(rpc);
 
        if (rpc->fd != -1) {
@@ -483,6 +513,8 @@ int rpc_disconnect(struct rpc_context *rpc, char *error)
 
 static void reconnect_cb(struct rpc_context *rpc, int status, void *data _U_, void *private_data)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (status != RPC_STATUS_SUCCESS) {
                rpc_error_all_pdus(rpc, "RPC ERROR: Failed to reconnect async");
                return;
@@ -497,6 +529,8 @@ static int rpc_reconnect_requeue(struct rpc_context *rpc)
 {
        struct rpc_pdu *pdu;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (rpc->fd != -1) {
 #if defined(WIN32)
                closesocket(rpc->fd);
@@ -536,6 +570,8 @@ int rpc_bind_udp(struct rpc_context *rpc, char *addr, int port)
        struct addrinfo *ai = NULL;
        char service[6];
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (rpc->is_udp == 0) {
                rpc_set_error(rpc, "Cant not bind UDP. Not UDP context");
                return -1;
@@ -579,6 +615,8 @@ int rpc_set_udp_destination(struct rpc_context *rpc, char *addr, int port, int i
        struct addrinfo *ai = NULL;
        char service[6];
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        if (rpc->is_udp == 0) {
                rpc_set_error(rpc, "Can not set destination sockaddr. Not UDP context");
                return -1;
@@ -612,6 +650,8 @@ int rpc_set_udp_destination(struct rpc_context *rpc, char *addr, int port, int i
 
 struct sockaddr *rpc_get_recv_sockaddr(struct rpc_context *rpc)
 {
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        return (struct sockaddr *)&rpc->udp_src;
 }
 
@@ -620,6 +660,8 @@ int rpc_queue_length(struct rpc_context *rpc)
        int i=0;
        struct rpc_pdu *pdu;
 
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
        for(pdu = rpc->outqueue; pdu; pdu = pdu->next) {
                i++;
        }