Author: arekm                        Date: Thu Dec 15 17:22:31 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- less intrusive, cleaner version

---- Files affected:
SOURCES:
   python-ssl-nonblocking.patch (1.1 -> 1.2) 

---- Diffs:

================================================================
Index: SOURCES/python-ssl-nonblocking.patch
diff -u SOURCES/python-ssl-nonblocking.patch:1.1 
SOURCES/python-ssl-nonblocking.patch:1.2
--- SOURCES/python-ssl-nonblocking.patch:1.1    Wed Dec 14 23:40:01 2005
+++ SOURCES/python-ssl-nonblocking.patch        Thu Dec 15 18:22:25 2005
@@ -28,97 +28,37 @@
  
  if __name__ == "__main__":
      test_main()
---- Python.org/Modules/_ssl.c  2004-08-04 16:59:00.000000000 +0200
-+++ Python/Modules/_ssl.c      2005-12-14 23:36:18.000000000 +0100
-@@ -65,6 +65,7 @@
- static PyObject *PySSL_SSLwrite(PySSLObject *self, PyObject *args);
- static PyObject *PySSL_SSLread(PySSLObject *self, PyObject *args);
- static int check_socket_and_wait_for_timeout(PySocketSockObject *s, 
-+                                           SSL *ssl,
-                                            int writing);
+--- Modules/_ssl.c.org 2005-12-15 18:17:03.000000000 +0100
++++ Modules/_ssl.c     2005-12-15 18:18:42.000000000 +0100
+@@ -455,6 +455,7 @@
+       int len = 1024;
+       int sockstate;
+       int err;
++      int pending;
  
- #define PySSLObject_Check(v)  ((v)->ob_type == &PySSL_Type)
-@@ -260,9 +261,9 @@
-                         goto fail;
-               }
-               if (err == SSL_ERROR_WANT_READ) {
--                      sockstate = check_socket_and_wait_for_timeout(Sock, 0);
-+                      sockstate = check_socket_and_wait_for_timeout(Sock, 
NULL, 0);
-               } else if (err == SSL_ERROR_WANT_WRITE) {
--                      sockstate = check_socket_and_wait_for_timeout(Sock, 1);
-+                      sockstate = check_socket_and_wait_for_timeout(Sock, 
NULL, 1);
-               } else {
-                       sockstate = SOCKET_OPERATION_OK;
-               }
-@@ -356,11 +357,11 @@
-  */
- 
- static int
--check_socket_and_wait_for_timeout(PySocketSockObject *s, int writing)
-+check_socket_and_wait_for_timeout(PySocketSockObject *s, SSL *ssl, int 
writing)
- {
-       fd_set fds;
-       struct timeval tv;
--      int rc;
-+      int pending, rc;
- 
-       /* Nothing to do unless we're in timeout mode (not non-blocking) */
-       if (s->sock_timeout < 0.0)
-@@ -372,6 +373,15 @@
-       if (s->sock_fd < 0)
-               return SOCKET_HAS_BEEN_CLOSED;
- 
-+      /* There is data to be read from SSL layer (even if there is no data on 
socket!) */
-+      if (!writing && ssl) {
-+              Py_BEGIN_ALLOW_THREADS
-+              pending = SSL_pending(ssl);
-+              Py_END_ALLOW_THREADS
-+              if (pending)
-+                      return SOCKET_OPERATION_OK;
-+      }
-+
-       /* Construct the arguments to select */
-       tv.tv_sec = (int)s->sock_timeout;
-       tv.tv_usec = (int)((s->sock_timeout - tv.tv_sec) * 1e6);
-@@ -402,7 +412,7 @@
-       if (!PyArg_ParseTuple(args, "s#:write", &data, &count))
-               return NULL;
- 
--      sockstate = check_socket_and_wait_for_timeout(self->Socket, 1);
-+      sockstate = check_socket_and_wait_for_timeout(self->Socket, NULL, 1);
-       if (sockstate == SOCKET_HAS_TIMED_OUT) {
-               PyErr_SetString(PySSLErrorObject, "The write operation timed 
out");
+       if (!PyArg_ParseTuple(args, "|i:read", &len))
                return NULL;
-@@ -420,9 +430,9 @@
-                       return NULL;
-               }
-               if (err == SSL_ERROR_WANT_READ) {
--                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, 0);
-+                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, NULL, 0);
-               } else if (err == SSL_ERROR_WANT_WRITE) {
--                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, 1);
-+                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, NULL, 1);
-               } else {
-                       sockstate = SOCKET_OPERATION_OK;
-               }
-@@ -462,7 +472,7 @@
+@@ -462,11 +463,17 @@
        if (!(buf = PyString_FromStringAndSize((char *) 0, len)))
                return NULL;
  
 -      sockstate = check_socket_and_wait_for_timeout(self->Socket, 0);
-+      sockstate = check_socket_and_wait_for_timeout(self->Socket, self->ssl, 
0);
-       if (sockstate == SOCKET_HAS_TIMED_OUT) {
-               PyErr_SetString(PySSLErrorObject, "The read operation timed 
out");
-               Py_DECREF(buf);
-@@ -479,9 +489,9 @@
-                       return NULL;
-               }
-               if (err == SSL_ERROR_WANT_READ) {
--                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, 0);
-+                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, NULL, 0);
-               } else if (err == SSL_ERROR_WANT_WRITE) {
--                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, 1);
-+                      sockstate = 
check_socket_and_wait_for_timeout(self->Socket, NULL, 1);
-               } else {
-                       sockstate = SOCKET_OPERATION_OK;
-               }
+-      if (sockstate == SOCKET_HAS_TIMED_OUT) {
+-              PyErr_SetString(PySSLErrorObject, "The read operation timed 
out");
+-              Py_DECREF(buf);
+-              return NULL;
++      Py_BEGIN_ALLOW_THREADS
++      pending = SSL_pending(self->ssl);
++      Py_END_ALLOW_THREADS
++      
++      if (!pending) {
++              sockstate = check_socket_and_wait_for_timeout(self->Socket, 0);
++              if (sockstate == SOCKET_HAS_TIMED_OUT) {
++                      PyErr_SetString(PySSLErrorObject, "The read operation 
timed out");
++                      Py_DECREF(buf);
++                      return NULL;
++              }
+       }
+       do {
+               err = 0;
+
================================================================

---- CVS-web:
    
http://cvs.pld-linux.org/SOURCES/python-ssl-nonblocking.patch?r1=1.1&r2=1.2&f=u

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to