[tor-commits] [ooni-probe/master] Fix method doHandshake() to callback to handleWantRead() and handleWantWrite().

art at torproject.org art at torproject.org
Tue Apr 30 13:01:44 UTC 2013


commit 27292c9c868694ca19e2d2b9aa9c32220f9d89cf
Author: Isis Lovecruft <isis at torproject.org>
Date:   Thu Feb 28 17:57:05 2013 +0000

    Fix method doHandshake() to callback to handleWantRead() and handleWantWrite().
---
 nettests/experimental/tls_handshake.py |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/nettests/experimental/tls_handshake.py b/nettests/experimental/tls_handshake.py
index 3c9a033..e443242 100644
--- a/nettests/experimental/tls_handshake.py
+++ b/nettests/experimental/tls_handshake.py
@@ -553,17 +553,29 @@ class TLSHandshakeTest(nettest.NetTestCase):
             """
             peername, peerport = connection.getpeername()
 
-            log.msg("Attempting handshake: %s" % peername)
-            connection.do_handshake()
-            log.debug("State: %s" % connection.state_string())
-            if connection.state_string() == \
-                    'SSL negotiation finished successfully':
+            try:
+                log.msg("Attempting handshake: %s" % peername)
+                connection.do_handshake()
+            except OpenSSL.SSL.WantReadError() as wre:
+                self.state = connection.state_string()
+                log.debug("Handshake state: %s" % self.state)
+                log.debug("doHandshake: WantReadError on first handshake attempt.")
+                connection = handleWantRead(connection)
+            except OpenSSL.SSL.WantWriteError() as wwe:
+                self.state = connection.state_string()
+                log.debug("Handshake state: %s" % self.state)
+                log.debug("doHandshake: WantWriteError on first handshake attempt.")
+                connection = handleWantWrite(connection)
+            else:
+                self.state = connection.state_string()
+
+            if self.state == 'SSL negotiation finished successfully':
                 ## jump to handshakeSuccessful and get certchain
                 return connection
-
             else:
                 sent = connection.send("o\r\n")
-                log.debug("State: %s" % connection.state_string())
+                self.state = connection.state_string()
+                log.debug("Handshake state: %s" % self.state)
                 log.debug("Transmitted %d bytes" % sent)
 
                 _read_buffer = connection.pending()





More information about the tor-commits mailing list