Author: ArcRiley
Date: 2009-01-04 02:11:17 -0500 (Sun, 04 Jan 2009)
New Revision: 1421

Modified:
   trunk/concordance/src/Core.c
Log:
New connections are now resolved


Modified: trunk/concordance/src/Core.c
===================================================================
--- trunk/concordance/src/Core.c        2009-01-04 06:24:02 UTC (rev 1420)
+++ trunk/concordance/src/Core.c        2009-01-04 07:11:17 UTC (rev 1421)
@@ -250,7 +250,7 @@
         default :
           PyErr_SetString(PyExc_AttributeError, "invalid address/hostname");
       }
-      return 0;
+      return FALSE;
     }
 
     /* Copy port into sockaddr struct
@@ -310,16 +310,16 @@
         g_source_set_callback(source, (GSourceFunc)conCore_listenNew,
                               (gpointer) self, NULL);
         g_source_attach(source, self->context);
-        ret = 1;
+        ret = TRUE;
       }
       else {
         PyErr_SetString(PyExc_OSError, "unable to bind listening socket");
-        ret = 0;
+        ret = FALSE;
       }
     } 
     else {
       PyErr_SetString(PyExc_OSError, "unable to bind listening socket");
-      ret = 0;
+      ret = FALSE;
     }
 
     /* before returning, free the previously created resinfo struct
@@ -337,12 +337,40 @@
   conCore_listenNew(GIOChannel* source, GIOCondition condition,
                     gpointer s) {                                         /*\
     cdef :                                                                \*/
-      conCoreObject*    self = (conCoreObject*) s;
-    if (source == self->s2s.chan)
-      printf("new server\n");
+      conCoreObject*        self = (conCoreObject*) s;
+      gint                  ret;
+      gint                  fd;
+      const struct sockaddr addr;
+      guint                 addrlen;
+      gchar                 host[256];
+
+    /* we're only interested in G_IO_IN events */
+    if (condition != G_IO_IN)
+      return TRUE;
+
+    /* accept new connection, return if we fail to connect
+
+       int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
+    */
+    if ((fd = accept(g_io_channel_unix_get_fd(source), 
+                     &addr, &addrlen))<0)
+      return TRUE;
+
+    /* lookup hostname
+
+       int getnameinfo(const struct sockaddr *sa, socklen_t salen,
+                       char *host, size_t hostlen,
+                       char *serv, size_t servlen, int flags);
+    */
+    ret = getnameinfo(&addr, addrlen, host, 255, NULL, 0, 0);
+    close(fd);
+
+    if (source == self->c2s.chan)
+      printf("new client: %s\n", host);
     else
-      printf("new client\n");
-    return 1;
+      printf("new server: %s\n", host);
+
+    return TRUE;
   }
 
 

_______________________________________________
PySoy-SVN mailing list
PySoy-SVN@pysoy.org
http://www.pysoy.org/mailman/listinfo/pysoy-svn

Reply via email to