@@ -147,11 +147,18 @@ def _validate_input(data_type, filename):
147
147
error = f"File { filename } does not exists!"
148
148
raise RuntimeError (error )
149
149
150
- async def read_with_prefix (self , timeout = 5 ):
150
+ async def read_with_prefix (self , timeout = 5 , retry = 0 ):
151
151
prefix_timeout = 30
152
152
if timeout > prefix_timeout :
153
153
prefix_timeout = timeout
154
- prefix = (await asyncio .wait_for (self .reader .readline (), timeout = prefix_timeout )).rstrip ()
154
+ try :
155
+ prefix = (await asyncio .wait_for (self .reader .readline (), timeout = prefix_timeout )).rstrip ()
156
+ except asyncio .exceptions .TimeoutError :
157
+ if retry :
158
+ print (f"Timeout error, but { retry } retry left" )
159
+ return await self .read_with_prefix (timeout = timeout , retry = retry - 1 )
160
+ else :
161
+ raise
155
162
pk_data = b''
156
163
msg_len = 0
157
164
if prefix != b'' :
@@ -343,21 +350,21 @@ async def send_file(self, path_from, path_to=None):
343
350
# await self.writer.wait_closed()
344
351
return rcv_data
345
352
346
- async def send_message (self , message , timeout = 2 ):
353
+ async def send_message (self , message , timeout = 2 , retry = 0 ):
347
354
await self .check_connection ()
348
- rcv = await self .send_data (self .server_address , data = message .encode (), timeout = timeout )
355
+ rcv = await self .send_data (self .server_address , data = message .encode (), timeout = timeout , retry = retry )
349
356
if rcv == 'Access denied' :
350
357
self .server_public_key = None
351
358
self .authorized = False
352
- return await self .send_message (message , timeout = timeout )
359
+ return await self .send_message (message , timeout = timeout , retry = retry )
353
360
elif not rcv :
354
361
if self .verbose or self .debug :
355
362
print (f'Reconnecting to { self .server_address } ...' )
356
363
# await self.close_connection()
357
- return await self .send_message (message , timeout = timeout )
364
+ return await self .send_message (message , timeout = timeout , retry = retry )
358
365
return rcv
359
366
360
- async def send_data (self , address , data = b'' , data_type = 'message' , timeout = 2 ):
367
+ async def send_data (self , address , data = b'' , data_type = 'message' , timeout = 2 , retry = 0 ):
361
368
if not self .connected :
362
369
await self .connect ()
363
370
#self.reader, self.writer = await asyncio.open_connection(
@@ -413,15 +420,15 @@ async def send_data(self, address, data=b'', data_type='message', timeout=2):
413
420
except :
414
421
print ('not aes' )
415
422
# rcv_data = await self.reader.read(4096)
416
- rcv_data = (await self .read_with_prefix (timeout = timeout ))[0 ]
423
+ rcv_data = (await self .read_with_prefix (timeout = timeout , retry = retry ))[0 ]
417
424
# print(f'Encoded: {rcv_data}, len: {len(base64.b64decode(rcv_data))}')
418
425
if data_type not in ['public_key' , 'auth_req' ] and self .server_public_key :
419
426
# print(f'Decrypted: {aes.decrypt(rcv_data)}')
420
427
if len (rcv_data ) > 0 :
421
428
rcv_data = self .aes .decrypt (rcv_data )
422
429
if data_type == 'message' and rcv_data == b'Sign ok' :
423
430
sign_data = rcv_data # Xz why
424
- rcv_data = self .aes .decrypt ((await self .read_with_prefix ())[0 ])
431
+ rcv_data = self .aes .decrypt ((await self .read_with_prefix (timeout = timeout , retry = retry ))[0 ])
425
432
elif rcv_data == b'Sign error' :
426
433
rcv_data = json .dumps ({'status' : False , 'description' : 'Sign error' }).encode ()
427
434
rcv_data = oe_common .fix_block_encoding_errors (rcv_data )
0 commit comments