Handle IncompleteReadError and InvalidChecksumError

This commit is contained in:
Lonami Exo
2018-10-03 14:46:10 +02:00
parent 3fd7c33127
commit e319fa3aa9
2 changed files with 38 additions and 14 deletions

View File

@@ -9,7 +9,7 @@ from .requeststate import RequestState
from .. import utils
from ..errors import (
BadMessageError, BrokenAuthKeyError, SecurityError, TypeNotFoundError,
rpc_message_to_error
InvalidChecksumError, rpc_message_to_error
)
from ..extensions import BinaryReader
from ..helpers import _ReadyQueue
@@ -376,6 +376,11 @@ class MTProtoSender:
__log__.warning('Security error while unpacking a '
'received message: %s', e)
continue
except InvalidChecksumError as e:
__log__.warning(
'Invalid checksum on the read packet (was %s expected %s)',
e.checksum, e.valid_checksum
)
except asyncio.CancelledError:
return
except (BrokenAuthKeyError, BufferError):
@@ -383,6 +388,13 @@ class MTProtoSender:
self._connection._state.auth_key = None
self._start_reconnect()
return
except asyncio.IncompleteReadError:
# TODO Handle packets that are too big and trigger this
# If it's not a packet that triggered this, just reconnect
__log__.info('Telegram closed the connection')
self._pending_state.clear()
self._start_reconnect()
return
except Exception:
__log__.exception('Unhandled error while receiving data')
self._start_reconnect()