qmsk/net/socket/address.pyx
changeset 49 e2f79e68418a
parent 46 64b4ffb44754
--- a/qmsk/net/socket/address.pyx	Tue Sep 01 00:08:02 2009 +0300
+++ b/qmsk/net/socket/address.pyx	Fri Sep 25 21:34:04 2009 +0300
@@ -1,104 +1,13 @@
 cimport qmsk.net.libc as libc
 cimport qmsk.net.py as py
 
-from qmsk.net.socket.address cimport *
+#from qmsk.net.socket.address cimport *
+
+cimport qmsk.net.libc as libc
 
 cimport qmsk.net.socket.platform as platform
 
-cdef class sockaddr :
-    cdef void _init_family (self, platform.sa_family_t family=platform.AF_UNSPEC) :
-        self.family = family
-
-    # XXX:use size_t
-    cdef int _get_sockaddr (self, platform.sockaddr **sa_ptr, platform.socklen_t *sa_len) except -1 :
-        """
-            Get the sockaddr pointer and sockaddr length for this address
-        """ 
-
-        raise NotImplementedError()
-
-    cdef platform.sockaddr* _get_sockaddr_ptr (self) except NULL :
-        """
-            Get the sockaddr pointer
-        """
-
-        cdef platform.sockaddr *sa
-        cdef platform.socklen_t sa_len
-
-        self._get_sockaddr(&sa, &sa_len)
-
-        return sa
-    
-    cdef platform.socklen_t _get_sockaddr_len (self) except -1 :
-        """
-            Get the sockaddr len
-        """
-
-        cdef platform.sockaddr *sa
-        cdef platform.socklen_t sa_len
-
-        self._get_sockaddr(&sa, &sa_len)
-
-        return sa_len
-
-    cdef int _set_sockaddr (self, platform.sockaddr *sa, size_t sa_len) except -1 :
-        """
-            Set the sockaddr value for this address; sa_len must match!
-        """
-
-        raise NotImplementedError()
-
-    def getnameinfo (self) :
-        """
-            Returns a (host, serv) tuple for this address à la getnameinfo
-
-            >>> addr = sockaddr_in()
-            >>> assert addr.getnameinfo() == (addr.addr, str(addr.port))
-        """
-
-        cdef platform.sockaddr *sa
-        cdef platform.socklen_t sa_len
-
-        # XXX: take as args?
-        cdef int flags = platform.NI_NUMERICHOST | platform.NI_NUMERICSERV
-        
-        # get our abstract sockaddr
-        self._get_sockaddr(&sa, &sa_len)
-
-        # get nice text format
-        return platform.getnameinfo(sa, sa_len, flags)
-
-    property addr :
-        """
-            The ASCII literal network address
-        """
-
-        def __get__ (self) :
-            """
-                Default implmentation using getnameinfo()
-            """
-
-            addr, port = self.getnameinfo()
-
-            return addr
-
-    property port :
-        """
-            The integer port number
-        """
-
-        def __get__ (self) :
-            """
-                Default implementation using getnameinfo() and int()
-            """
-
-            addr, port = self.getnameinfo()
-
-            return int(port)
-    
-    def __repr__ (self) :
-        return "sockaddr(%d, %s, %d)" % (self.family, self.addr, self.port)
-
+# concrete sockaddr implementation types
 # mapping of AF -> sockaddr, user-modifyable
 cimport qmsk.net.socket.af_inet, qmsk.net.socket.af_inet6
 
@@ -226,7 +135,7 @@
         Look up given hostname/service using the given socket parameters, and return a sequence of addrinfo objects.
             
             hostname        - internet address/hostname to look up, or None (for INADDR_ANY/localhost, see AI_PASSIVE)
-            service         - port/service to use, or None (for ephemeral)
+            service         - port/service to use, or None (for ephemeral). Should be given as a string
             family          - address family to use, one of AF_*. May be AF_UNSPEC.
             socktype        - socket type to use, one of SOCK_*.
             protocol        - protocol to use, one of IPPROTO_* or zero to pick the default protocol for the given
@@ -267,6 +176,10 @@
         _hostname = hostname
     
     if service is not None :
+        # XXX: also accept integer port number?
+        if isinstance(service, int) :
+            service = str(service)
+
         _service = service
 
     # operate!