extras-buildsys/common SSLConnection.py,1.3.4.3,1.3.4.4

Daniel Williams (dcbw) fedora-extras-commits at redhat.com
Tue Jan 24 01:12:55 UTC 2006


Author: dcbw

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

Modified Files:
      Tag: STABLE_0_4
	SSLConnection.py 
Log Message:
2006-01-23  Dan Williams  <dcbw at redhat.com>

    * common/SSLConnection.py
        - Revert previous commit, causing too much trouble




Index: SSLConnection.py
===================================================================
RCS file: /cvs/fedora/extras-buildsys/common/SSLConnection.py,v
retrieving revision 1.3.4.3
retrieving revision 1.3.4.4
diff -u -r1.3.4.3 -r1.3.4.4
--- SSLConnection.py	22 Jan 2006 06:01:56 -0000	1.3.4.3
+++ SSLConnection.py	24 Jan 2006 01:12:41 -0000	1.3.4.4
@@ -29,12 +29,6 @@
         self.__dict__["close_refcount"] = 0
         self.__dict__["closed"] = False
         self.__dict__["timeout"] = self.DEFAULT_TIMEOUT
-
-        # Buffer stuff
-        self.__dict__["buffer_size"] = 16384
-        self.__dict__["pos"] = 0
-        self.__dict__["buffer"] = ""
-
     def __del__(self):
         self.__dict__["conn"].close()
     def __getattr__(self,name):
@@ -82,76 +76,57 @@
             self.shutdown()
             self.__dict__["conn"].close()
             self.__dict__["closed"] = True
-
-    def write(self, data, flags=0):
-        origlen = len(data)
-        sent = 0
+    def sendall(self, data, flags=0):
         while True:
-            try:
-                sent = self.__dict__["conn"].send(data)
-            except (SSL.WantReadError, SSL.WantWriteError):
-                continue
-            if sent == len(data):
-                break
-            data = data[sent:]
-
-        return origlen
-
-    def recv(self, amt):
-        return self.read(amt)
-
-    send = write
-
-    sendall = write
-
-    def tell(self):
-        return self.__dict__["pos"]
-
-    def seek(self, pos, mode=0):
-        raise NotImplementedError, "seek"
-
-    def read(self, amt, flags=0):
-        # Initially, the buffer size is the default buffer size.
-        # Unfortunately, pending() does not return meaningful data until
-        # recv() is called, so we only adjust the buffer size after the
-        # first read
-        buffer_size = self.__dict__["buffer_size"]
-        # Read only the specified amount of data
-        while amt is None or len(self.__dict__["buffer"]) < amt:
-            # if amt is None (read till the end), fills in self.__dict__["buffer"]
-            if amt is not None:
-                buffer_size = min(amt - len(self.__dict__["buffer"]), buffer_size)
-
-            try:
-                data = self.__dict__["conn"].recv(buffer_size)
-            except SSL.ZeroReturnError:
-                # Nothing more to be read
-                break
-            except (SSL.WantReadError, SSL.WantWriteError):
-                # Try again
-                continue
-
-            self.__dict__["buffer"] = self.__dict__["buffer"] + data
-
-            # More bytes to read?
-            pending = self.__dict__["conn"].pending()
-            if pending == 0:
-                # we're done here
-                break
-
-        if amt:
-            ret = self.__dict__["buffer"][:amt]
-            self.__dict__["buffer"] = self.__dict__["buffer"][amt:]
-        else:
-            ret = self.__dict__["buffer"]
-            self.__dict__["buffer"] = ""
-
-        self.__dict__["pos"] = self.__dict__["pos"] + len(ret)
-        return ret
+            # Use select() to simulate a socket timeout without setting the socket
+            # to non-blocking mode
+            (read, write, error) = select.select([], [self.__dict__["conn"]], [], self.__dict__["timeout"])
+            if self.__dict__["conn"] in write:
+                starttime = time.time()
+                while True:
+                    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)
+                    except SSL.WantWriteError:
+                        time.sleep(0.1)
+
+                    curtime = time.time()
+                    if curtime - starttime > self.__dict__["timeout"]:
+                        raise socket.timeout
+            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.__dict__["timeout"])
+            if self.__dict__["conn"] in read:
+                starttime = time.time()
+                while True:
+                    try:
+                        return self.__dict__["conn"].recv(bufsize, flags)
+                    except SSL.ZeroReturnError:
+                        return None
+                    except SSL.WantReadError:
+                        time.sleep(0.1)
+
+                    curtime = time.time()
+                    if curtime - starttime > self.__dict__["timeout"]:
+                        raise socket.timeout
+            else:
+                raise socket.timeout
+            if self.__dict__["conn"] in error:
+                raise socket.error
+        return None
 
 class PlgFileObject(socket._fileobject):
-    def read(self, bufsize, flags=0):
-        return self._sock.read(bufsize, flags)
     def close(self):
         """
         socket._fileobject doesn't actually _close_ the socket,




More information about the fedora-extras-commits mailing list