diff --git a/syncplay/client.py b/syncplay/client.py index 2ea0ca3..8a42bc8 100755 --- a/syncplay/client.py +++ b/syncplay/client.py @@ -12,10 +12,10 @@ import time from copy import deepcopy from functools import wraps +from twisted.application.internet import ClientService from twisted.internet.endpoints import HostnameEndpoint from twisted.internet.protocol import ClientFactory from twisted.internet import reactor, task, defer, threads -from twisted.application.internet import ClientService try: import certifi @@ -752,7 +752,10 @@ class SyncplayClient(object): return(0.1 * (2 ** min(retries, 5))) self._reconnectingService = ClientService(self._endpoint, self.protocolFactory, retryPolicy=retry) - waitForConnection = self._reconnectingService.whenConnected(failAfterFailures=1) + try: + waitForConnection = self._reconnectingService.whenConnected(failAfterFailures=1) + except TypeError: + waitForConnection = self._reconnectingService.whenConnected() self._reconnectingService.startService() def connectedNow(f): diff --git a/syncplay/protocols.py b/syncplay/protocols.py index 7e8305e..3bf0902 100755 --- a/syncplay/protocols.py +++ b/syncplay/protocols.py @@ -4,8 +4,10 @@ import time from datetime import datetime from functools import wraps -from twisted.protocols.basic import LineReceiver +from twisted import version as twistedVersion from twisted.internet.interfaces import IHandshakeListener +from twisted.protocols.basic import LineReceiver +from twisted.python.versions import Version from zope.interface.declarations import implementer import syncplay @@ -335,10 +337,23 @@ class SyncClientProtocol(JSONCommandProtocol): answer = message["startTLS"] if "startTLS" in message else None if "true" in answer and not self.logged and self._client.protocolFactory.options is not None: self.transport.startTLS(self._client.protocolFactory.options) + # To be deleted when the support for Twisted between >=16.4.0 and < 17.1.0 is dropped + minTwistedVersion = Version('twisted', 17, 1, 0) + if twistedVersion < minTwistedVersion: + self._client.protocolFactory.options._ctx.set_info_callback(self.customHandshakeCallback) elif "false" in answer: self._client.ui.showErrorMessage(getMessage("startTLS-not-supported-server")) self.sendHello() + def customHandshakeCallback(self, conn, where, ret): + # To be deleted when the support for Twisted between >=16.4.0 and < 17.1.0 is dropped + from OpenSSL.SSL import SSL_CB_HANDSHAKE_START, SSL_CB_HANDSHAKE_DONE + if where == SSL_CB_HANDSHAKE_START: + self._client.ui.showDebugMessage("TLS handshake started") + if where == SSL_CB_HANDSHAKE_DONE: + self._client.ui.showDebugMessage("TLS handshake done") + self.handshakeCompleted() + def handshakeCompleted(self): self._serverCertificateTLS = self.transport.getPeerCertificate() self._subjectTLS = self._serverCertificateTLS.get_subject().CN