| ... |
... |
@@ -50,7 +50,7 @@ HTTP_METHODS_T = Literal[ |
|
50
|
50
|
CHUNK_SIZE = 32768
|
|
51
|
51
|
DEFAULT_USER_AGENT = f'nbxmpp/{nbxmpp.__version__}'
|
|
52
|
52
|
SIGNAL_ACTIONS = GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION
|
|
53
|
|
-MIN_SOUP_3_4 = Soup.check_version(3, 4, 0)
|
|
|
53
|
+
|
|
54
|
54
|
|
|
55
|
55
|
class HTTPLogAdapter(logging.LoggerAdapter):
|
|
56
|
56
|
def process(self, msg: str, kwargs: Any) -> tuple[str, Any]:
|
| ... |
... |
@@ -59,10 +59,10 @@ class HTTPLogAdapter(logging.LoggerAdapter): |
|
59
|
59
|
|
|
60
|
60
|
class HTTPSession:
|
|
61
|
61
|
def __init__(self, user_agent: str = DEFAULT_USER_AGENT) -> None:
|
|
62
|
|
-
|
|
63
|
62
|
self._session = Soup.Session()
|
|
64
|
63
|
self._session.set_user_agent(user_agent)
|
|
65
|
64
|
self._session.add_feature_by_type(Soup.ContentSniffer)
|
|
|
65
|
+ self._session.remove_feature_by_type(Soup.ContentDecoder)
|
|
66
|
66
|
|
|
67
|
67
|
def get_soup_session(self) -> Soup.Session:
|
|
68
|
68
|
return self._session
|
| ... |
... |
@@ -280,9 +280,6 @@ class HTTPRequest(GObject.GObject): |
|
280
|
280
|
self._message.connect('finished', self._on_finished)
|
|
281
|
281
|
self._message.connect('got-headers', self._on_got_headers)
|
|
282
|
282
|
|
|
283
|
|
- if MIN_SOUP_3_4:
|
|
284
|
|
- self._message.connect('got-body-data', self._on_got_body_data)
|
|
285
|
|
-
|
|
286
|
283
|
soup_session = self._session.get_soup_session()
|
|
287
|
284
|
soup_session.send_async(self._message,
|
|
288
|
285
|
GLib.PRIORITY_DEFAULT,
|
| ... |
... |
@@ -367,9 +364,8 @@ class HTTPRequest(GObject.GObject): |
|
367
|
364
|
self._finish_read()
|
|
368
|
365
|
return
|
|
369
|
366
|
|
|
370
|
|
- if not MIN_SOUP_3_4:
|
|
371
|
|
- self._received_size += len(bytes_)
|
|
372
|
|
- self._check_content_overflow()
|
|
|
367
|
+ self._received_size += len(bytes_)
|
|
|
368
|
+ self._check_content_overflow()
|
|
373
|
369
|
|
|
374
|
370
|
if self._output_stream is None:
|
|
375
|
371
|
self._response_body_data += bytes_
|
| ... |
... |
@@ -387,9 +383,7 @@ class HTTPRequest(GObject.GObject): |
|
387
|
383
|
return
|
|
388
|
384
|
|
|
389
|
385
|
self._read_async()
|
|
390
|
|
-
|
|
391
|
|
- if not MIN_SOUP_3_4:
|
|
392
|
|
- self._emit_progress()
|
|
|
386
|
+ self._emit_progress()
|
|
393
|
387
|
|
|
394
|
388
|
def _finish_read(self, error: Optional[HTTPRequestError] = None) -> None:
|
|
395
|
389
|
self._log.info('Finished reading')
|
| ... |
... |
@@ -435,18 +429,6 @@ class HTTPRequest(GObject.GObject): |
|
435
|
429
|
self._log.info('Body received')
|
|
436
|
430
|
self._body_received = True
|
|
437
|
431
|
|
|
438
|
|
- def _on_got_body_data(self,
|
|
439
|
|
- _message: Soup.Message,
|
|
440
|
|
- chunk_size: int
|
|
441
|
|
- ) -> None:
|
|
442
|
|
-
|
|
443
|
|
- self._received_size += chunk_size
|
|
444
|
|
- self._check_content_overflow()
|
|
445
|
|
-
|
|
446
|
|
- status = self._message.get_status()
|
|
447
|
|
- if status in (Soup.Status.OK, Soup.Status.CREATED):
|
|
448
|
|
- self._emit_progress()
|
|
449
|
|
-
|
|
450
|
432
|
def _emit_progress(self) -> None:
|
|
451
|
433
|
if not self._emit_response_progress:
|
|
452
|
434
|
return
|
| ... |
... |
@@ -459,8 +441,7 @@ class HTTPRequest(GObject.GObject): |
|
459
|
441
|
|
|
460
|
442
|
def _check_content_overflow(self) -> None:
|
|
461
|
443
|
if self._received_size > self._response_content_length:
|
|
462
|
|
- self._set_error(HTTPRequestError.CONTENT_OVERFLOW)
|
|
463
|
|
- self.cancel()
|
|
|
444
|
+ self._finish_read(HTTPRequestError.CONTENT_OVERFLOW)
|
|
464
|
445
|
|
|
465
|
446
|
def _on_restarted(self, _message: Soup.Message) -> None:
|
|
466
|
447
|
self._log.info('Restarted')
|