From: <pj...@us...> - 2008-10-20 23:54:18
|
Revision: 5488 http://jython.svn.sourceforge.net/jython/?rev=5488&view=rev Author: pjenvey Date: 2008-10-20 23:54:14 +0000 (Mon, 20 Oct 2008) Log Message: ----------- allow abuse of _fileobject by fixing its close() to act like CPython's when the underlying _sock isn't a Jython socket. fixes test_urllib2net Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2008-10-20 23:53:47 UTC (rev 5487) +++ trunk/jython/Lib/socket.py 2008-10-20 23:54:14 UTC (rev 5488) @@ -1114,9 +1114,12 @@ if self._sock: self.flush() finally: - if self._sock and isinstance(self._sock, _nonblocking_api_mixin): - self._sock.reference_count -= 1 - if not self._sock.reference_count or self._close: + if self._sock: + if isinstance(self._sock, _nonblocking_api_mixin): + self._sock.reference_count -= 1 + if not self._sock.reference_count or self._close: + self._sock.close() + elif self._close: self._sock.close() self._sock = None This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <am...@us...> - 2008-12-18 11:03:48
|
Revision: 5775 http://jython.svn.sourceforge.net/jython/?rev=5775&view=rev Author: amak Date: 2008-12-18 11:03:44 +0000 (Thu, 18 Dec 2008) Log Message: ----------- Fix for broken SSL support. Thanks to dmbaggett for the patch. http://bugs.jython.org/issue1182 Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2008-12-17 19:42:40 UTC (rev 5774) +++ trunk/jython/Lib/socket.py 2008-12-18 11:03:44 UTC (rev 5775) @@ -1350,6 +1350,8 @@ def __init__(self, plain_sock, keyfile=None, certfile=None): self.ssl_sock = self.make_ssl_socket(plain_sock) + self._in_buf = java.io.BufferedInputStream(self.ssl_sock.getInputStream()) + self._out_buf = java.io.BufferedOutputStream(self.ssl_sock.getOutputStream()) def make_ssl_socket(self, plain_socket, auto_close=0): java_net_socket = plain_socket._get_jsocket() @@ -1363,10 +1365,8 @@ return ssl_socket def read(self, n=4096): - # Probably needs some work on efficency - in_buf = java.io.BufferedInputStream(self.ssl_sock.getInputStream()) data = jarray.zeros(n, 'b') - m = in_buf.read(data, 0, n) + m = self._in_buf.read(data, 0, n) if m <= 0: return "" if m < n: @@ -1374,10 +1374,9 @@ return data.tostring() def write(self, s): - # Probably needs some work on efficency - out = java.io.BufferedOutputStream(self.ssl_sock.getOutputStream()) - out.write(s) - out.flush() + self._out_buf.write(s) + self._out_buf.flush() + return len(s) def _get_server_cert(self): return self.ssl_sock.getSession().getPeerCertificates()[0] This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <am...@us...> - 2009-03-31 12:38:51
|
Revision: 6132 http://jython.svn.sourceforge.net/jython/?rev=6132&view=rev Author: amak Date: 2009-03-31 12:38:36 +0000 (Tue, 31 Mar 2009) Log Message: ----------- Undoing a change that got checked in here http://fisheye3.atlassian.com/changelog/jython/?cs=4791 Which came originally from here http://svn.python.org/view/python/trunk/Lib/socket.py?view=diff&r1=61007&r2=61008 But was wrong; changing min() to max() solves this problem. The cpython change was ostensibly made to correct a memory allocation problem, but was wrong, and was undone here http://svn.python.org/view?view=rev&revision=62627 We should probably review _fileobject implementation sometime, since the cpython one has now changed a fair amount. Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2009-03-31 03:35:14 UTC (rev 6131) +++ trunk/jython/Lib/socket.py 2009-03-31 12:38:36 UTC (rev 6132) @@ -1265,7 +1265,7 @@ self._rbuf = "" while True: left = size - buf_len - recv_size = min(self._rbufsize, left) + recv_size = max(self._rbufsize, left) data = self._sock.recv(recv_size) if not data: break This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <am...@us...> - 2009-04-18 13:06:49
|
Revision: 6241 http://jython.svn.sourceforge.net/jython/?rev=6241&view=rev Author: amak Date: 2009-04-18 13:06:43 +0000 (Sat, 18 Apr 2009) Log Message: ----------- For the moment, we do not actually support IPV6. Before we can support it, we need to establish how such support can be adequately tested. Having the has_ipv6 flag as 1/True is misleading to the users. Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2009-04-18 02:53:00 UTC (rev 6240) +++ trunk/jython/Lib/socket.py 2009-04-18 13:06:43 UTC (rev 6241) @@ -484,10 +484,11 @@ else: return self._do_receive_nio(0, num_bytes, flags) +# For now, we DO NOT have complete IPV6 support. +has_ipv6 = False + # Name and address functions - -has_ipv6 = 1 - + def _gethostbyaddr(name): # This is as close as I can get; at least the types are correct... addresses = java.net.InetAddress.getAllByName(gethostbyname(name)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <am...@us...> - 2009-05-17 20:41:57
|
Revision: 6354 http://jython.svn.sourceforge.net/jython/?rev=6354&view=rev Author: amak Date: 2009-05-17 20:41:51 +0000 (Sun, 17 May 2009) Log Message: ----------- Improving error reporting for unsupported socket options. Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2009-05-16 05:15:28 UTC (rev 6353) +++ trunk/jython/Lib/socket.py 2009-05-17 20:41:51 UTC (rev 6354) @@ -192,7 +192,7 @@ SO_SNDTIMEO = -512 SO_TYPE = -1024 SO_USELOOPBACK = -2048 - + __all__ = ['AF_UNSPEC', 'AF_INET', 'AF_INET6', 'AI_PASSIVE', 'SOCK_DGRAM', 'SOCK_RAW', 'SOCK_RDM', 'SOCK_SEQPACKET', 'SOCK_STREAM', 'SOL_SOCKET', 'SO_BROADCAST', 'SO_ERROR', 'SO_KEEPALIVE', 'SO_LINGER', 'SO_OOBINLINE', @@ -205,6 +205,16 @@ 'SHUT_RD', 'SHUT_WR', 'SHUT_RDWR', ] +def _constant_to_name(const_value): + sock_module = sys.modules['socket'] + try: + for name in dir(sock_module): + if getattr(sock_module, name) is const_value: + return name + return "Unknown" + finally: + sock_module = None + class _nio_impl: timeout = None @@ -235,7 +245,7 @@ return struct.pack('ii', enabled, linger_time) return result else: - raise error(errno.ENOPROTOOPT, "Level %d option not supported on socket(%s): %d" % (level, str(self.jsocket), option)) + raise error(errno.ENOPROTOOPT, "Socket option '%s' (level '%s') not supported on socket(%s)" % (_constant_to_name(option), _constant_to_name(level), str(self.jsocket))) def setsockopt(self, level, option, value): if self.options.has_key( (level, option) ): @@ -245,7 +255,7 @@ else: getattr(self.jsocket, "set%s" % self.options[ (level, option) ])(value) else: - raise error(errno.ENOPROTOOPT, "Level %d option not supported on socket(%s): %d" % (level, str(self.jsocket), option)) + raise error(errno.ENOPROTOOPT, "Socket option '%s' (level '%s') not supported on socket(%s)" % (_constant_to_name(option), _constant_to_name(level), str(self.jsocket))) def close(self): self.jsocket.close() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <am...@us...> - 2009-06-21 22:20:15
|
Revision: 6489 http://jython.svn.sourceforge.net/jython/?rev=6489&view=rev Author: amak Date: 2009-06-21 22:19:53 +0000 (Sun, 21 Jun 2009) Log Message: ----------- Checking in a partial fix for issue 1378. This fix stops the AttributeError. But further work is needed to determine what cpython errno constants the java SSL exceptions should map to. Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2009-06-21 03:17:50 UTC (rev 6488) +++ trunk/jython/Lib/socket.py 2009-06-21 22:19:53 UTC (rev 6489) @@ -74,7 +74,14 @@ import java.nio.channels.UnresolvedAddressException import java.nio.channels.UnsupportedAddressTypeException +# Javax.net.ssl classes import javax.net.ssl.SSLSocketFactory +# Javax.net.ssl exceptions +javax.net.ssl.SSLException +javax.net.ssl.SSLHandshakeException +javax.net.ssl.SSLKeyException +javax.net.ssl.SSLPeerUnverifiedException +javax.net.ssl.SSLProtocolException import org.python.core.io.DatagramSocketIO import org.python.core.io.ServerSocketIO @@ -85,6 +92,7 @@ class herror(error): pass class gaierror(error): pass class timeout(error): pass +class sslerror(error): pass ALL = None @@ -120,6 +128,15 @@ (java.nio.channels.NotYetConnectedException, ALL) : None, (java.nio.channels.UnresolvedAddressException, ALL) : lambda: gaierror(errno.EGETADDRINFOFAILED, 'getaddrinfo failed'), (java.nio.channels.UnsupportedAddressTypeException, ALL) : None, + +# These error codes are currently wrong: getting them correct is going to require +# some investigation. Cpython 2.6 introduced extensive SSL support. + +(javax.net.ssl.SSLException, ALL) : lambda: sslerror(-1, 'SSL exception'), +(javax.net.ssl.SSLHandshakeException, ALL) : lambda: sslerror(-1, 'SSL handshake exception'), +(javax.net.ssl.SSLKeyException, ALL) : lambda: sslerror(-1, 'SSL key exception'), +(javax.net.ssl.SSLPeerUnverifiedException, ALL) : lambda: sslerror(-1, 'SSL peer unverified exception'), +(javax.net.ssl.SSLProtocolException, ALL) : lambda: sslerror(-1, 'SSL protocol exception'), } @@ -1392,12 +1409,15 @@ class ssl: - def __init__(self, plain_sock, keyfile=None, certfile=None): - self.ssl_sock = self.make_ssl_socket(plain_sock) - self._in_buf = java.io.BufferedInputStream(self.ssl_sock.getInputStream()) - self._out_buf = java.io.BufferedOutputStream(self.ssl_sock.getOutputStream()) + def __init__(self, plain_sock, keyfile=None, certfile=None): + try: + self.ssl_sock = self._make_ssl_socket(plain_sock) + self._in_buf = java.io.BufferedInputStream(self.ssl_sock.getInputStream()) + self._out_buf = java.io.BufferedOutputStream(self.ssl_sock.getOutputStream()) + except java.lang.Exception, jlx: + raise _map_exception(jlx) - def make_ssl_socket(self, plain_socket, auto_close=0): + def _make_ssl_socket(self, plain_socket, auto_close=0): java_net_socket = plain_socket._get_jsocket() assert isinstance(java_net_socket, java.net.Socket) host = java_net_socket.getInetAddress().getHostAddress() @@ -1409,21 +1429,30 @@ return ssl_socket def read(self, n=4096): - data = jarray.zeros(n, 'b') - m = self._in_buf.read(data, 0, n) - if m <= 0: - return "" - if m < n: - data = data[:m] - return data.tostring() + try: + data = jarray.zeros(n, 'b') + m = self._in_buf.read(data, 0, n) + if m <= 0: + return "" + if m < n: + data = data[:m] + return data.tostring() + except java.lang.Exception, jlx: + raise _map_exception(jlx) def write(self, s): - self._out_buf.write(s) - self._out_buf.flush() - return len(s) + try: + self._out_buf.write(s) + self._out_buf.flush() + return len(s) + except java.lang.Exception, jlx: + raise _map_exception(jlx) def _get_server_cert(self): - return self.ssl_sock.getSession().getPeerCertificates()[0] + try: + return self.ssl_sock.getSession().getPeerCertificates()[0] + except java.lang.Exception, jlx: + raise _map_exception(jlx) def server(self): cert = self._get_server_cert() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <pj...@us...> - 2009-10-27 03:11:31
|
Revision: 6913 http://jython.svn.sourceforge.net/jython/?rev=6913&view=rev Author: pjenvey Date: 2009-10-27 03:11:20 +0000 (Tue, 27 Oct 2009) Log Message: ----------- != None -> is not None Modified Paths: -------------- trunk/jython/Lib/socket.py Modified: trunk/jython/Lib/socket.py =================================================================== --- trunk/jython/Lib/socket.py 2009-10-27 03:00:16 UTC (rev 6912) +++ trunk/jython/Lib/socket.py 2009-10-27 03:11:20 UTC (rev 6913) @@ -388,7 +388,7 @@ def accept(self): if self.mode in (MODE_BLOCKING, MODE_NONBLOCKING): new_cli_chan = self.jchannel.accept() - if new_cli_chan != None: + if new_cli_chan is not None: return _client_socket_impl(new_cli_chan.socket()) else: return None This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |