1616from core .trad_crypto import (
1717 decrypt_xchacha20poly1305
1818)
19- from base64 import b64decode
19+ from base64 import b64decode , urlsafe_b64encode
2020import copy
2121import logging
2222
@@ -28,15 +28,18 @@ def decode_blob_stream(data: bytes) -> list:
2828
2929 offset = 0
3030 while offset < len (data ):
31- if offset + COLDWIRE_LEN_OFFSET > len (data ):
31+ if offset + COLDWIRE_LEN_OFFSET + 32 > len (data ):
3232 raise ValueError ("Incomplete length prefix, malformed or corrupted data." )
3333
34+ ack_id = data [offset : offset + 32 ]
35+ offset += 32
36+
3437 msg_len = int .from_bytes (data [offset : offset + COLDWIRE_LEN_OFFSET ], "big" )
3538 offset += COLDWIRE_LEN_OFFSET
3639 if offset + msg_len > len (data ):
3740 raise ValueError ("Incomplete message data" )
3841
39- messages .append (data [offset :offset + msg_len ])
42+ messages .append (ack_id + data [offset :offset + msg_len ])
4043 offset += msg_len
4144 return messages
4245
@@ -46,11 +49,14 @@ def parse_blobs(blobs: list[bytes]) -> dict:
4649
4750 for raw in blobs :
4851 try :
52+ ack_id = raw [:32 ]
53+ raw = raw [32 :]
4954 sender , blob = raw .split (b"\0 " , 1 )
5055 sender = sender .decode ("utf-8" )
5156 parsed_messages .append ({
5257 "sender" : sender ,
53- "blob" : blob
58+ "blob" : blob ,
59+ "ack_id" : ack_id
5460 })
5561 except ValueError as e :
5662 logger .error ("Invalid message format! Error: %s" , str (e ))
@@ -62,6 +68,9 @@ def background_worker(user_data, user_data_lock, ui_queue, stop_flag):
6268 # Incase we received a SMP question request last time and user did not answer it.
6369 smp_unanswered_questions (user_data , user_data_lock , ui_queue )
6470
71+ # Acknowledgements
72+ acks = {}
73+
6574 while not stop_flag .is_set ():
6675 with user_data_lock :
6776 server_url = user_data ["server_url" ]
@@ -73,6 +82,8 @@ def background_worker(user_data, user_data_lock, ui_queue, stop_flag):
7382 f"{ server_url } /data/longpoll" ,
7483 "GET" ,
7584 auth_token = auth_token ,
85+ metadata = acks if acks else None ,
86+ doseq = True ,
7687 longpoll = random_number_range (LONGPOLL_MIN , LONGPOLL_MAX )
7788 )
7889 except TimeoutError :
@@ -98,6 +109,13 @@ def background_worker(user_data, user_data_lock, ui_queue, stop_flag):
98109 sender = message ["sender" ]
99110 blob = message ["blob" ]
100111
112+ print ("wtf you mean nigga?" , message ["ack_id" ])
113+ ack_id = urlsafe_b64encode (message ["ack_id" ]).decode ().rstrip ("=" )
114+ if "acks" not in acks :
115+ acks ["acks" ] = [ack_id ]
116+ else :
117+ acks ["acks" ].append (ack_id )
118+
101119 with user_data_lock :
102120 user_data_copied = copy .deepcopy (user_data )
103121
0 commit comments