]> git.saurik.com Git - apple/libinfo.git/blobdiff - rpc.subproj/clnt_udp.c
Libinfo-392.tar.gz
[apple/libinfo.git] / rpc.subproj / clnt_udp.c
index 53c618b4d77328b18ff79992c20292e47a2a33ae..e7a1e9f19036c2b654ad2323723cf4b8dced1285 100644 (file)
@@ -77,7 +77,7 @@ static char *rcsid = "$Id: clnt_udp.c,v 1.4 2002/03/15 22:07:49 majka Exp $";
 extern int     bindresvport();
 extern bool_t  xdr_opaque_auth();
 
-__private_extern__ u_short pmap_getport_timeout(struct sockaddr_in *address, uint32_t program, uint32_t version, uint32_t protocol, struct timeval *timeout, struct timeval *totaltimeout);
+extern u_short pmap_getport_timeout(struct sockaddr_in *address, uint32_t program, uint32_t version, uint32_t protocol, struct timeval *timeout, struct timeval *totaltimeout);
 
 extern int errno;
 
@@ -135,7 +135,7 @@ struct cu_data {
  * sendsz and recvsz are the maximum allowable packet sizes that can be
  * sent and received.
  */
-__private_extern__ CLIENT *
+CLIENT *
 clntudp_bufcreate_timeout(struct sockaddr_in *raddr, uint32_t program, uint32_t version, int *sockp, uint32_t sendsz, uint32_t recvsz, struct timeval *retry_timeout, struct timeval *total_timeout)
 {
        CLIENT *cl;
@@ -188,7 +188,7 @@ clntudp_bufcreate_timeout(struct sockaddr_in *raddr, uint32_t program, uint32_t
        
        cu->cu_total_timeout.tv_sec = -1;
        cu->cu_total_timeout.tv_usec = -1;
-       if (total_timeout != NULL) cu->cu_total_timeout = *retry_timeout;
+       if (total_timeout != NULL) cu->cu_total_timeout = *total_timeout;
        
        rfd = open("/dev/random", O_RDONLY, 0);
        if ((rfd < 0) || (read(rfd, &call_msg.rm_xid, sizeof(call_msg.rm_xid)) != sizeof(call_msg.rm_xid)))
@@ -262,21 +262,21 @@ fooy:
 CLIENT *
 clntudp_bufcreate(raddr, program, version, wait, sockp, sendsz, recvsz)
 #ifdef __LP64__
-struct sockaddr_in *raddr;
-uint32_t program;
-uint32_t version;
-struct timeval wait;
-int *sockp;
-uint32_t sendsz;
-uint32_t recvsz;
+       struct sockaddr_in *raddr;
+       uint32_t program;
+       uint32_t version;
+       struct timeval wait;
+       int *sockp;
+       uint32_t sendsz;
+       uint32_t recvsz;
 #else
-struct sockaddr_in *raddr;
-u_long program;
-u_long version;
-struct timeval wait;
-register int *sockp;
-u_int sendsz;
-u_int recvsz;
+       struct sockaddr_in *raddr;
+       u_long program;
+       u_long version;
+       struct timeval wait;
+       register int *sockp;
+       u_int sendsz;
+       u_int recvsz;
 #endif
 {
        return clntudp_bufcreate_timeout(raddr, (uint32_t)program, (uint32_t)version, sockp, (uint32_t)sendsz, (uint32_t)recvsz, &wait, NULL);
@@ -305,7 +305,11 @@ clntudp_create(raddr, program, version, wait, sockp)
 static enum clnt_stat 
 clntudp_call(cl, proc, xargs, argsp, xresults, resultsp, utimeout)
        register CLIENT *cl;            /* client handle */
+#ifdef __LP64__
+       uint32_t                proc;           /* procedure number */
+#else
        u_long          proc;           /* procedure number */
+#endif
        xdrproc_t       xargs;          /* xdr routine for args */
        caddr_t         argsp;          /* pointer to args */
        xdrproc_t       xresults;       /* xdr routine for results */
@@ -427,11 +431,17 @@ send_again:
                        cu->cu_error.re_errno = errno;
                        return (cu->cu_error.re_status = RPC_CANTRECV);
                }
+#ifdef __LP64__
+               if (inlen < sizeof(uint32_t))
+                       continue;
+               /* see if reply transaction id matches sent id */
+               if (*((uint32_t *)(cu->cu_inbuf)) != *((uint32_t *)(cu->cu_outbuf))) continue;
+#else
                if (inlen < sizeof(u_long))
-                       continue;       
+                       continue;
                /* see if reply transaction id matches sent id */
-               if (*((u_long *)(cu->cu_inbuf)) != *((u_long *)(cu->cu_outbuf)))
-                       continue;       
+               if (*((u_long *)(cu->cu_inbuf)) != *((u_long *)(cu->cu_outbuf))) continue;
+#endif
                /* we now assume we have the proper reply */
                break;
        }