From: <am...@us...> - 2010-03-29 17:17:24
|
Revision: 6993 http://jython.svn.sourceforge.net/jython/?rev=6993&view=rev Author: amak Date: 2010-03-29 17:17:18 +0000 (Mon, 29 Mar 2010) Log Message: ----------- Adding support for socket.getservbyname, getservbyport and getprotobyname. Support made possible by Wayne Meissner's jnr-netdb project. http://github.com/wmeissner/jnr-netdb Many thanks to Wayne for his work. Modified Paths: -------------- trunk/jython/Lib/socket.py trunk/jython/Lib/test/test_socket.py trunk/jython/build.xml Added Paths: ----------- trunk/jython/extlibs/jnr-netdb-0.4.jar Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2010-03-28 17:28:38 UTC (rev 6992) +++ trunk/jython/Lib/socket.py 2010-03-29 17:17:18 UTC (rev 6993) @@ -454,9 +454,9 @@ return num_bytes def _do_send_nio(self, byte_array, socket_address, flags): - byte_buf = java.nio.ByteBuffer.wrap(byte_array) - if self.jchannel.isConnected() and socket_address is None: - bytes_sent = self.jchannel.write(byte_buf) + byte_buf = java.nio.ByteBuffer.wrap(byte_array) + if self.jchannel.isConnected() and socket_address is None: + bytes_sent = self.jchannel.write(byte_buf) else: bytes_sent = self.jchannel.send(byte_buf, socket_address) return bytes_sent @@ -566,18 +566,26 @@ names, addrs = _gethostbyaddr(name) return (names[0], names, addrs) -def getservbyname(servicename, protocolname=None): - # http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4071389 - # How complex is the structure of /etc/services? - raise NotImplementedError("getservbyname not yet supported on jython.") +def getservbyname(service_name, protocol_name=None): + try: + from jnr.netdb import Service + except ImportError: + return None + return Service.getServiceByName(service_name, protocol_name).getPort() -def getservbyport(port, protocolname=None): - # Same situation as above - raise NotImplementedError("getservbyport not yet supported on jython.") +def getservbyport(port, protocol_name=None): + try: + from jnr.netdb import Service + except ImportError: + return None + return Service.getServiceByPort(port, protocol_name).getName() -def getprotobyname(protocolname=None): - # Same situation as above - raise NotImplementedError("getprotobyname not yet supported on jython.") +def getprotobyname(protocol_name=None): + try: + from jnr.netdb import Protocol + except ImportError: + return None + return Protocol.getProtocolByName(protocol_name).getProto() def _realsocket(family = AF_INET, type = SOCK_STREAM, protocol=0): assert family == AF_INET, "Only AF_INET sockets are currently supported on jython" Modified: trunk/jython/Lib/test/test_socket.py =================================================================== --- trunk/jython/Lib/test/test_socket.py 2010-03-28 17:28:38 UTC (rev 6992) +++ trunk/jython/Lib/test/test_socket.py 2010-03-29 17:17:18 UTC (rev 6993) @@ -349,7 +349,6 @@ self.assertRaises(OverflowError, func, 1L<<34) def testGetServBy(self): - if sys.platform[:4] == 'java': return # not implemented on java eq = self.assertEqual # Find one service that exists, then check all the related interfaces. # I've ordered this by protocols that have both a tcp and udp @@ -862,7 +861,7 @@ msg = self.serv.recv(len(MSG)) self.assertEqual(msg, MSG) - def _testSendAndRecv(self): + def _testSendAndRecv(self): self.cli.connect( (self.HOST, self.PORT) ) self.cli.send(MSG, 0) @@ -874,7 +873,7 @@ msg = self.serv.recv(len(MSG)) self.assertEqual(msg, MSG) - def _testSendAndRecvTimeoutMode(self): + def _testSendAndRecvTimeoutMode(self): self.cli.connect( (self.HOST, self.PORT) ) self.cli.settimeout(10) self.cli.send(MSG, 0) Modified: trunk/jython/build.xml =================================================================== --- trunk/jython/build.xml 2010-03-28 17:28:38 UTC (rev 6992) +++ trunk/jython/build.xml 2010-03-29 17:17:18 UTC (rev 6993) @@ -205,6 +205,7 @@ <pathelement path="${extlibs.dir}/jffi-x86_64-SunOS.jar"/> <pathelement path="${extlibs.dir}/jffi.jar"/> <pathelement path="${extlibs.dir}/jnr-posix.jar"/> + <pathelement path="${extlibs.dir}/jnr-netdb-0.4.jar"/> </path> <available property="informix.present" classname="com.informix.jdbc.IfxDriver" classpath="${informix.jar}" /> @@ -597,6 +598,7 @@ <zipfileset src="extlibs/jffi-x86_64-SunOS.jar"/> <zipfileset src="extlibs/jffi.jar"/> <zipfileset src="extlibs/jnr-posix.jar"/> + <zipfileset src="extlibs/jnr-netdb-0.4.jar"/> <!-- <rule pattern="com.sun.jna.**" result="org.python.jna.@1"/> --> <rule pattern="org.jruby.ext.posix.**" result="org.python.posix.@1"/> <zipfileset src="extlibs/constantine.jar"/> Added: trunk/jython/extlibs/jnr-netdb-0.4.jar =================================================================== (Binary files differ) Property changes on: trunk/jython/extlibs/jnr-netdb-0.4.jar ___________________________________________________________________ Added: svn:mime-type + application/octet-stream This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |