Attempt at making layer migrations more smooth (#158)

This commit is contained in:
Lonami Exo 2017-07-26 16:10:45 +02:00
parent 9d35a836d1
commit 7844cd358e
2 changed files with 16 additions and 3 deletions

View File

@ -281,9 +281,14 @@ class MtProtoSender:
# Note that this code is IMPORTANT for skipping RPC results of
# lost requests (i.e., ones from the previous connection session)
if not self._process_msg(
inner_msg_id, sequence, reader, updates):
try:
if not self._process_msg(
inner_msg_id, sequence, reader, updates):
reader.set_position(begin_position + inner_length)
except:
# If any error is raised, something went wrong; skip the packet
reader.set_position(begin_position + inner_length)
raise
return True

View File

@ -5,7 +5,9 @@ from os import path
# Import some externalized utilities to work with the Telegram types and more
from . import helpers as utils
from .errors import RPCError, FloodWaitError, FileMigrateError
from .errors import (
RPCError, FloodWaitError, FileMigrateError, TypeNotFoundError
)
from .network import authenticator, MtProtoSender, TcpTransport
from .utils import get_appropriated_part_size
@ -140,6 +142,12 @@ class TelegramBareClient:
self.dc_options = result.dc_options
return True
except TypeNotFoundError as e:
# This is fine, probably layer migration
self._logger.debug('Found invalid item, probably migrating', e)
self.disconnect()
self.connect(exported_auth=exported_auth)
except (RPCError, ConnectionError) as error:
# Probably errors from the previous session, ignore them
self.disconnect()