From 1736a8ea9b0dd3aaf0cdc20f501a835b0c7dfa82 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Wed, 11 Apr 2018 23:21:14 +0200 Subject: [PATCH 1/4] Use port 443 for production servers --- pyrogram/connection/connection.py | 4 ++-- pyrogram/session/internals/data_center.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pyrogram/connection/connection.py b/pyrogram/connection/connection.py index 02f57efc..509cd10d 100644 --- a/pyrogram/connection/connection.py +++ b/pyrogram/connection/connection.py @@ -32,8 +32,8 @@ class Connection: 2: TCPIntermediate } - def __init__(self, ipv4: str, proxy: type, mode: int = 1): - self.address = (ipv4, 80) + def __init__(self, address: tuple, proxy: type, mode: int = 1): + self.address = address self.proxy = proxy self.mode = self.MODES.get(mode, TCPAbridged) self.lock = threading.Lock() diff --git a/pyrogram/session/internals/data_center.py b/pyrogram/session/internals/data_center.py index 369e5bce..232ca13b 100644 --- a/pyrogram/session/internals/data_center.py +++ b/pyrogram/session/internals/data_center.py @@ -35,4 +35,4 @@ class DataCenter: } def __new__(cls, dc_id: int, test_mode: bool): - return cls.TEST[dc_id] if test_mode else cls.PROD[dc_id] + return (cls.TEST[dc_id], 80) if test_mode else (cls.PROD[dc_id], 443) From 862567a1ed3ce9287599a30fcdd9b91588be8cf9 Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Apr 2018 08:29:39 +0200 Subject: [PATCH 2/4] Tune session settings --- pyrogram/session/session.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 5d54ff1f..72939491 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -61,7 +61,7 @@ class Session: INITIAL_SALT = 0x616e67656c696361 NET_WORKERS = 1 - WAIT_TIMEOUT = 30 + WAIT_TIMEOUT = 15 MAX_RETRIES = 5 ACKS_THRESHOLD = 8 PING_INTERVAL = 5 @@ -308,7 +308,9 @@ class Session: break try: - self._send(functions.PingDelayDisconnect(0, self.PING_INTERVAL + 15), False) + self._send(functions.PingDelayDisconnect( + 0, self.WAIT_TIMEOUT + 10 + ), False) except (OSError, TimeoutError): pass @@ -338,7 +340,7 @@ class Session: try: self.current_salt = self._send(functions.GetFutureSalts(1)).salts[0] - except (OSError, TimeoutError): + except (OSError, TimeoutError, Error): self.connection.close() break @@ -395,12 +397,14 @@ class Session: def send(self, data: Object): for i in range(self.MAX_RETRIES): - self.is_connected.wait() + self.is_connected.wait(self.WAIT_TIMEOUT) try: return self._send(data) except (OSError, TimeoutError): - (log.warning if i > 0 else log.info)("{}: {} Retrying {}".format(i, datetime.now(), type(data))) + (log.warning if i > 2 else log.info)( + "{}: {} Retrying {}".format(i, datetime.now(), type(data)) + ) continue else: return None From 552474a0e2314b13e28c212de585aca668f0fbfb Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Apr 2018 08:30:52 +0200 Subject: [PATCH 3/4] Raise any other unknown exception --- pyrogram/session/session.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 72939491..42b72371 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -159,6 +159,9 @@ class Session: log.info("Connection inited: Layer {}".format(layer)) except (OSError, TimeoutError, Error): self.stop() + except Exception as e: + self.stop() + raise e else: break From 9dc767b88ea29f702dfc2c0940bf69f9bb4b1ebd Mon Sep 17 00:00:00 2001 From: Dan <14043624+delivrance@users.noreply.github.com> Date: Thu, 12 Apr 2018 10:40:17 +0200 Subject: [PATCH 4/4] Wait a little bit before retrying --- pyrogram/session/session.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pyrogram/session/session.py b/pyrogram/session/session.py index 42b72371..2bd59908 100644 --- a/pyrogram/session/session.py +++ b/pyrogram/session/session.py @@ -19,6 +19,7 @@ import logging import platform import threading +import time from datetime import timedelta, datetime from hashlib import sha1, sha256 from io import BytesIO @@ -314,7 +315,7 @@ class Session: self._send(functions.PingDelayDisconnect( 0, self.WAIT_TIMEOUT + 10 ), False) - except (OSError, TimeoutError): + except (OSError, TimeoutError, Error): pass log.debug("PingThread stopped") @@ -408,6 +409,7 @@ class Session: (log.warning if i > 2 else log.info)( "{}: {} Retrying {}".format(i, datetime.now(), type(data)) ) + time.sleep(1) continue else: return None