Skip to content

Commit 374fd75

Browse files
committed
refactor: Improve protocol availability
1 parent ccd9958 commit 374fd75

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

core/requests.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ def encode_file(name: str, filename: str, data: bytes, boundary: str, CRLF: str,
8080

8181

8282

83-
def http_request(url: str, method: str, auth_token: str = None, metadata: dict = None, headers: dict = None, blob: bytes = None, longpoll: int = None) -> bytes:
83+
def http_request(url: str, method: str, auth_token: str = None, metadata: dict = None, headers: dict = None, blob: bytes = None, longpoll: int = None, doseq: bool = False) -> bytes:
8484
if method.upper() not in ["POST", "GET", "PUT", "DELETE"]:
8585
raise ValueError(f"Invalid request method `{method}`")
8686

@@ -128,7 +128,11 @@ def http_request(url: str, method: str, auth_token: str = None, metadata: dict =
128128
raise ValueError("Request method is POST/PUT but no metadata nor blob were given.")
129129

130130
else:
131-
req = request.Request(url, method=method.upper())
131+
full_url = url
132+
if metadata:
133+
full_url += "?" + urllib.parse.urlencode(metadata, doseq=doseq)
134+
135+
req = request.Request(full_url, method=method.upper())
132136

133137
if headers is not None:
134138
for key, value in headers.items():

logic/background_worker.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
from core.trad_crypto import (
1717
decrypt_xchacha20poly1305
1818
)
19-
from base64 import b64decode
19+
from base64 import b64decode, urlsafe_b64encode
2020
import copy
2121
import 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

Comments
 (0)