[pypy-svn] r76952 - in pypy/branch/rsocket-improvements/pypy: module/_socket/test rlib

fijal at codespeak.net fijal at codespeak.net
Wed Sep 8 19:47:51 CEST 2010


Author: fijal
Date: Wed Sep  8 19:47:49 2010
New Revision: 76952

Modified:
   pypy/branch/rsocket-improvements/pypy/module/_socket/test/test_sock_app.py
   pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py
Log:
hopefully finish support for AF_PACKET


Modified: pypy/branch/rsocket-improvements/pypy/module/_socket/test/test_sock_app.py
==============================================================================
--- pypy/branch/rsocket-improvements/pypy/module/_socket/test/test_sock_app.py	(original)
+++ pypy/branch/rsocket-improvements/pypy/module/_socket/test/test_sock_app.py	Wed Sep  8 19:47:49 2010
@@ -243,6 +243,12 @@
     c_addr = rffi.cast(lltype.Ptr(rsocket._c.sockaddr), c_addr_ll)
     rffi.setintfield(c_addr_ll, 'c_sll_ifindex', 1)
     rffi.setintfield(c_addr_ll, 'c_sll_protocol', 8)
+    rffi.setintfield(c_addr_ll, 'c_sll_pkttype', 13)
+    rffi.setintfield(c_addr_ll, 'c_sll_hatype', 0)
+    rffi.setintfield(c_addr_ll, 'c_sll_halen', 3)
+    c_addr_ll.c_sll_addr[0] = 'a'
+    c_addr_ll.c_sll_addr[1] = 'b'
+    c_addr_ll.c_sll_addr[2] = 'c'
     rffi.setintfield(c_addr, 'c_sa_family', socket.AF_PACKET)
     # fd needs to be somehow valid
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -250,7 +256,11 @@
     w_obj = rsocket.make_address(c_addr, addrlen).as_object(fd, space)
     assert space.is_true(space.eq(w_obj, space.newtuple([
         space.wrap('lo'),
-        space.w_None])))
+        space.wrap(2048),
+        space.wrap(13),
+        space.wrap(False),
+        space.wrap("abc"),
+        ])))
 
 def test_getnameinfo():
     host = "127.0.0.1"

Modified: pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py
==============================================================================
--- pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py	(original)
+++ pypy/branch/rsocket-improvements/pypy/rlib/rsocket.py	Wed Sep  8 19:47:49 2010
@@ -218,11 +218,36 @@
         return ifname
 
     def get_protocol(self):
-        a = self.lock
+        a = self.lock(_c.sockaddr_ll)
+        res = ntohs(rffi.getintfield(a, 'c_sll_protocol'))
+        self.unlock()
+        return res
+
+    def get_pkttype(self):
+        a = self.lock(_c.sockaddr_ll)
+        res = rffi.getintfield(a, 'c_sll_pkttype')
+        self.unlock()
+        return res
+
+    def get_hatype(self):
+        a = self.lock(_c.sockaddr_ll)
+        res = bool(rffi.getintfield(a, 'c_sll_hatype'))
+        self.unlock()
+        return res
+        
+    def get_addr(self):
+        a = self.lock(_c.sockaddr_ll)
+        lgt = rffi.getintfield(a, 'c_sll_halen')
+        res = rffi.charpsize2str(a.c_sll_addr, lgt)
+        self.unlock()
+        return res
 
     def as_object(self, fd, space):
         return space.newtuple([space.wrap(self.get_ifname(fd)),
-                               space.wrap(self.get_protocol())])
+                               space.wrap(self.get_protocol()),
+                               space.wrap(self.get_pkttype()),
+                               space.wrap(self.get_hatype()),
+                               space.wrap(self.get_addr())])
 
 class INETAddress(IPAddress):
     family = AF_INET



More information about the Pypy-commit mailing list