extras-buildsys/common AuthedXMLRPCServer.py, 1.5, 1.6 SSLConnection.py, 1.2, 1.3

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Tue Aug 2 00:58:18 UTC 2005


Author: dcbw

Update of /cvs/fedora/extras-buildsys/common
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv21591/common

Modified Files:
	AuthedXMLRPCServer.py SSLConnection.py 
Log Message:
2005-08-01  Dan Williams <dcbw at redhat.com>

    * common/AuthedXMLRPCServer.py
      common/SSLConnection.py
      server/Builder.py
        - Simulate socket timeouts with select()




Index: AuthedXMLRPCServer.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/common/AuthedXMLRPCServer.py,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AuthedXMLRPCServer.py	21 Jul 2005 17:18:07 -0000	1.5
+++ AuthedXMLRPCServer.py	2 Aug 2005 00:58:16 -0000	1.6
@@ -58,7 +58,10 @@
     def do_POST(self):
         authinfo = self.server.get_authinfo(self.request, self.client_address)
         _add_authinfo(authinfo)
-        SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.do_POST(self)
+        try:
+            SimpleXMLRPCServer.SimpleXMLRPCRequestHandler.do_POST(self)
+        except socket.timeout:
+            pass
         _del_authinfo()
 
 


Index: SSLConnection.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/common/SSLConnection.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- SSLConnection.py	13 Jul 2005 15:21:05 -0000	1.2
+++ SSLConnection.py	2 Aug 2005 00:58:16 -0000	1.3
@@ -5,13 +5,11 @@
 # Copyright (c) 2002 Red Hat, Inc.
 #
 # Author: Mihai Ibanescu <misa at redhat.com>
-
-# $Id$
+# Modifications by Dan Williams <dcbw at redhat.com>
 
 
 from OpenSSL import SSL, crypto
-import socket
-import os, string
+import os, string, time, socket, select
 
 
 class SSLConnection:
@@ -19,6 +17,9 @@
     This whole class exists just to filter out a parameter
     passed in to the shutdown() method in SimpleXMLRPC.doPOST()
     """
+
+    DEFAULT_TIMEOUT = 10
+
     def __init__(self, conn):
         """
         Connection is not yet a new-style class,
@@ -68,13 +69,39 @@
             self.__dict__["conn"].close()
             self.__dict__["closed"] = True
         self.__dict__["close_refcount"] = self.__dict__["close_refcount"] - 1
-    def recv(self, bufsize):
-        ret = None
-        try:
-            ret = self.__dict__["conn"].recv(bufsize)
-        except SSL.ZeroReturnError:
-            pass
-        return ret
+    def sendall(self, data, flags=0):
+        while True:
+            # Use select() to simulate a socket timeout without setting the socket
+            # to non-blocking mode
+            (read, write, error) = select.select([], [self.__dict__["conn"]], [], self.DEFAULT_TIMEOUT)
+            if self.__dict__["conn"] in write:
+                try:
+                    return self.__dict__["conn"].sendall(data, flags)
+                except SSL.SysCallError, e:
+                    if e[0] == 32:      # Broken Pipe
+                        self.close()
+                    else:
+                        raise socket.error(e)
+            else:
+                raise socket.timeout
+            if self.__dict__["conn"] in error:
+                raise socket.error
+        return None
+    def recv(self, bufsize, flags=0):
+        while True:
+            # Use select() to simulate a socket timeout without setting the socket
+            # to non-blocking mode
+            (read, write, error) = select.select([self.__dict__["conn"]], [], [], self.DEFAULT_TIMEOUT)
+            if self.__dict__["conn"] in read:
+                try:
+                    return self.__dict__["conn"].recv(bufsize, flags)
+                except SSL.ZeroReturnError:
+                    return None
+            else:
+                raise socket.timeout
+            if self.__dict__["conn"] in error:
+                raise socket.error
+        return None
 
 class PlgFileObject(socket._fileobject):
     def close(self):




More information about the scm-commits mailing list