The attached patch adds NATIVENET debugging support to datagram socket 
operations, just like already exist on stream sockets.

Here's a ChangeLog entry (if necessary):

1999-10-14  Patrick A Tullmann  <[EMAIL PROTECTED]>

        * libraries/clib/net/PlainDatagramSocketImpl.c: add
        NATIVENET debugging support.

-Pat

----- ----- ---- ---  ---  --   -    -      -         -               -
Pat Tullmann                                       [EMAIL PROTECTED]

Index: libraries/clib/net/PlainDatagramSocketImpl.c
===================================================================
RCS file: /home/cvspublic/kaffe/libraries/clib/net/PlainDatagramSocketImpl.c,v
retrieving revision 1.18
diff -u -b -r1.18 PlainDatagramSocketImpl.c
--- PlainDatagramSocketImpl.c   1999/09/10 13:41:41     1.18
+++ PlainDatagramSocketImpl.c   1999/10/15 04:51:42
@@ -23,6 +23,7 @@
 #include "java_net_SocketOptions.h"
 #include "nets.h"
 #include <jsyscall.h>
+#include "../../../kaffe/kaffevm/debug.h"
 
 /*
  * Supported socket options
@@ -43,6 +44,41 @@
 #endif
   };
 
+#ifdef DEBUG
+ static const struct {
+   int opt;
+   char *name;
+ } optionNames[] = {
+#ifdef SO_SNDBUF
+   { java_net_SocketOptions_SO_SNDBUF, "SO_SNDBUF" },
+#endif
+#ifdef SO_RCVBUF
+   { java_net_SocketOptions_SO_RCVBUF, "SO_RCVBUF" },
+#endif
+#ifdef SO_REUSEADDR
+   { java_net_SocketOptions_SO_REUSEADDR, "SO_REUSEADDR" },
+#endif
+ };
+#endif /*DEBUG*/
+
+#ifdef DEBUG
+/* Generate a string for an inet addr (in host form). */
+static char *
+ip2str(jint addr) 
+{
+       static char addrbuf[(4 * 3) + 3];
+       unsigned int top = (addr >> 24) & 0xFF;
+       unsigned int tmid = (addr >> 16) & 0xFF;
+       unsigned int bmid = (addr >> 8) & 0xFF;
+       unsigned int bottom = addr & 0xFF;
+
+       sprintf(addrbuf, "%u.%u.%u.%u", top, tmid, bmid, bottom);
+       return addrbuf;
+}
+#endif /* DEBUG */
+
+
+
 /*
  * Create a datagram socket.
  */
@@ -52,12 +88,22 @@
        int fd;
        int rc;
 
+       DBG(NATIVENET,
+           dprintf("datagram_create(%p)\n", this);
+           )
+
        rc = KSOCKET(AF_INET, SOCK_DGRAM, 0, &fd);
        if (rc) {
                unhand(unhand(this)->fd)->fd = -1;
                SignalError("java.net.SocketException", SYS_ERROR(rc));
        }
+
        unhand(unhand(this)->fd)->fd = fd;
+
+       DBG(NATIVENET,
+           dprintf("datagram_create(%p) -> fd=%d\n", this, fd);
+           )
+
 #if defined(SOL_SOCKET) && defined(SO_BROADCAST)
        /* On some systems broadcasting is off by default - enable it here */
        {
@@ -79,6 +125,11 @@
        int alen;
        const int fd = unhand(unhand(this)->fd)->fd;
 
+       DBG(NATIVENET,
+           dprintf("datagram_bind(%p, %s, %d)\n", 
+                   this, ip2str(unhand(laddr)->address), port);
+           )
+
        memset(&addr, 0, sizeof(addr));
 #if defined(BSD44)
        addr.sin_len = sizeof(addr);
@@ -101,6 +152,11 @@
                port = ntohs(addr.sin_port);
        }
        unhand(this)->localPort = port;
+
+       DBG(NATIVENET,
+           dprintf("  datagram_bind(%p, %s, -) -> (localPort: %d)\n", this,
+                   ip2str(unhand(laddr)->address), port);
+           );
 }
 
 void
@@ -110,6 +166,11 @@
        ssize_t bsent;
        struct sockaddr_in addr;
 
+       DBG(NATIVENET,
+           dprintf("datagram_send(%p, %p [%d bytes])\n",
+                   this, pkt, unhand(pkt)->length);
+           );
+
        memset(&addr, 0, sizeof(addr));
 #if defined(BSD44)
        addr.sin_len = sizeof(addr);
@@ -118,7 +179,19 @@
        addr.sin_port = htons(unhand(pkt)->port);
        addr.sin_addr.s_addr = htonl(unhand(unhand(pkt)->address)->address);
 
-       rc = KSENDTO(unhand(unhand(this)->fd)->fd, 
unhand_array(unhand(pkt)->buf)->body, unhand(pkt)->length, 0, (struct sockaddr*)&addr, 
sizeof(addr), &bsent);
+       DBG(NATIVENET,
+           dprintf("  datagram_send() to %s:%d\n",
+                   ip2str(unhand(unhand(pkt)->address)->address), unhand(pkt)->port);
+           );
+
+       rc = KSENDTO(unhand(unhand(this)->fd)->fd,
+                    unhand_array(unhand(pkt)->buf)->body, unhand(pkt)->length,
+                    0, (struct sockaddr*)&addr, sizeof(addr), &bsent);
+
+       DBG(NATIVENET,
+           dprintf("  datagram_send() -> rc=%d bsent=%d\n", rc, bsent);
+           );
+
        if (rc) {
                SignalError("java.net.SocketException", SYS_ERROR(rc));
        }
@@ -150,10 +223,22 @@
        struct sockaddr_in addr;
        int alen = sizeof(addr);
 
+       assert(this);
+       assert(pkt);
+
+       DBG(NATIVENET,
+           dprintf("datagram_receive(%p, %p [%d bytes])\n",
+                   this, pkt, unhand(pkt)->length);
+           );
+
        /* Which port am I receiving from */
        addr.sin_port = htons(unhand(this)->localPort);
 
-       rc = KRECVFROM(unhand(unhand(this)->fd)->fd, 
unhand_array(unhand(pkt)->buf)->body, unhand(pkt)->length, 0, (struct sockaddr*)&addr, 
&alen, unhand(this)->timeout, &r);
+       /* XXX should assert (unhand(pkt)->length <= 
+unhand_array(unhand(pkt)->buf)->length), no? */
+
+       rc = KRECVFROM(unhand(unhand(this)->fd)->fd, 
+unhand_array(unhand(pkt)->buf)->body,
+                      unhand(pkt)->length,
+                      0, (struct sockaddr*)&addr, &alen, unhand(this)->timeout, &r);
        if (rc) {
                SignalError("java.net.SocketException", SYS_ERROR(rc));
        }
@@ -165,6 +250,13 @@
         * the new address from which the packet came.
         */
        unhand(unhand(pkt)->address)->hostName = 0;
+
+       DBG(NATIVENET,
+           dprintf("  datagram_receive(%p, %p) -> from %s:%d; brecv=%d\n",
+                   this, pkt,
+                   ip2str(ntohl(addr.sin_addr.s_addr)),
+                   ntohs(addr.sin_port), r);
+           )
 }
 
 /*
@@ -174,6 +266,10 @@
 java_net_PlainDatagramSocketImpl_datagramSocketClose(struct 
Hjava_net_PlainDatagramSocketImpl* this)
 {
        int r;
+
+       DBG(NATIVENET,
+           dprintf("datagram_close(%p)\n", this);
+           );
 
        if (unhand(unhand(this)->fd)->fd != -1) {
                r = KSOCKCLOSE(unhand(unhand(this)->fd)->fd);

Reply via email to