[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