[Python-checkins] python/dist/src/Lib imaplib.py,1.51,1.52

pierslauder@users.sourceforge.net pierslauder@users.sourceforge.net
Sun, 23 Jun 2002 03:47:15 -0700


Update of /cvsroot/python/python/dist/src/Lib
In directory usw-pr-cvs1:/tmp/cvs-serv1482/dist/src/Lib

Modified Files:
	imaplib.py 
Log Message:
Fix IMAP4_SSL read and send methods to take account of short data

Index: imaplib.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/imaplib.py,v
retrieving revision 1.51
retrieving revision 1.52
diff -C2 -d -r1.51 -r1.52
*** imaplib.py	17 Jun 2002 12:43:20 -0000	1.51
--- imaplib.py	23 Jun 2002 10:47:13 -0000	1.52
***************
*** 19,23 ****
  # GET/SETQUOTA contributed by Andreas Zeidler <az@kreativkombinat.de> June 2002.
  
! __version__ = "2.52"
  
  import binascii, re, socket, time, random, sys
--- 19,23 ----
  # GET/SETQUOTA contributed by Andreas Zeidler <az@kreativkombinat.de> June 2002.
  
! __version__ = "2.53"
  
  import binascii, re, socket, time, random, sys
***************
*** 1057,1065 ****
      def read(self, size):
          """Read 'size' bytes from remote."""
!         return self.sslobj.read(size)
  
  
      def readline(self):
          """Read line from remote."""
          line = ""
          while 1:
--- 1057,1071 ----
      def read(self, size):
          """Read 'size' bytes from remote."""
!         # sslobj.read() sometimes returns < size bytes
!         data = self.sslobj.read(size)
!         while len(data) < size:
!                 data += self.sslobj.read(len(data)-size)
! 
!         return data
  
  
      def readline(self):
          """Read line from remote."""
+         # NB: socket.ssl needs a "readline" method, or perhaps a "makefile" method.
          line = ""
          while 1:
***************
*** 1071,1075 ****
      def send(self, data):
          """Send data to remote."""
!         self.sslobj.write(data)
  
  
--- 1077,1088 ----
      def send(self, data):
          """Send data to remote."""
!         # NB: socket.ssl needs a "sendall" method to match socket objects.
!         bytes = len(data)
!         while bytes > 0:
!             sent = self.sslobj.write(data)
!             if sent == bytes:
!                 break    # avoid copy
!             data = data[sent:]
!             bytes = bytes - sent