Attempt at fixing msg_id too low/high (#95)

This commit is contained in:
Lonami Exo 2017-05-26 16:39:59 +02:00
parent 289baa0fed
commit 7f84374e98
2 changed files with 16 additions and 1 deletions

View File

@ -333,7 +333,16 @@ class MtProtoSender:
reader.read_int() # request_sequence reader.read_int() # request_sequence
error_code = reader.read_int() error_code = reader.read_int()
raise BadMessageError(error_code) error = BadMessageError(error_code)
if error_code in (16, 17):
# sent msg_id too low or too high (respectively).
# Use the current msg_id to determine the right time offset.
self.session.update_time_offset(correct_msg_id=msg_id)
self.session.save()
self.logger.warning('Read Bad Message error: ' + str(error))
self.logger.info('Attempting to use the correct time offset.')
else:
raise error
def handle_rpc_result(self, msg_id, sequence, reader, request): def handle_rpc_result(self, msg_id, sequence, reader, request):
self.logger.debug('Handling RPC result, request is%s None', ' not' if request else '') self.logger.debug('Handling RPC result, request is%s None', ' not' if request else '')

View File

@ -65,3 +65,9 @@ class Session:
self.last_message_id = new_msg_id self.last_message_id = new_msg_id
return new_msg_id return new_msg_id
def update_time_offset(self, correct_msg_id):
"""Updates the time offset based on a known correct message ID"""
now = int(time.time())
correct = correct_msg_id >> 32
self.time_offset = correct - now