Philipp Hörist pushed to branch master at gajim / python-nbxmpp


Commits:
025d8211 by Philipp Hörist at 2023-05-21T11:25:00+02:00
cfix: HTTP: Don’t cancel() on overlow for Soup < 3.4.0

- - - - -
39e2dbf8 by Philipp Hörist at 2023-05-21T12:16:46+02:00
cfix: HTTP: Remove usage of got-body-data signal

It seems broken see https://gitlab.gnome.org/GNOME/libsoup/-/issues/347

- - - - -
618834af by Philipp Hörist at 2023-05-21T12:17:22+02:00
fix: HTTP: Don’t accept content encoding

Currently libsoup does not offer any signal which communicates
the transfered size over the network, which makes it impossible
to track progress for encoded content.

Fixes #143

- - - - -


1 changed file:

- nbxmpp/http.py


Changes:

=====================================
nbxmpp/http.py
=====================================
@@ -50,7 +50,7 @@ HTTP_METHODS_T = Literal[
 CHUNK_SIZE = 32768
 DEFAULT_USER_AGENT = f'nbxmpp/{nbxmpp.__version__}'
 SIGNAL_ACTIONS = GObject.SignalFlags.RUN_LAST | GObject.SignalFlags.ACTION
-MIN_SOUP_3_4 = Soup.check_version(3, 4, 0)
+
 
 class HTTPLogAdapter(logging.LoggerAdapter):
     def process(self, msg: str, kwargs: Any) -> tuple[str, Any]:
@@ -59,10 +59,10 @@ class HTTPLogAdapter(logging.LoggerAdapter):
 
 class HTTPSession:
     def __init__(self, user_agent: str = DEFAULT_USER_AGENT) -> None:
-
         self._session = Soup.Session()
         self._session.set_user_agent(user_agent)
         self._session.add_feature_by_type(Soup.ContentSniffer)
+        self._session.remove_feature_by_type(Soup.ContentDecoder)
 
     def get_soup_session(self) -> Soup.Session:
         return self._session
@@ -280,9 +280,6 @@ class HTTPRequest(GObject.GObject):
         self._message.connect('finished', self._on_finished)
         self._message.connect('got-headers', self._on_got_headers)
 
-        if MIN_SOUP_3_4:
-            self._message.connect('got-body-data', self._on_got_body_data)
-
         soup_session = self._session.get_soup_session()
         soup_session.send_async(self._message,
                                 GLib.PRIORITY_DEFAULT,
@@ -367,9 +364,8 @@ class HTTPRequest(GObject.GObject):
             self._finish_read()
             return
 
-        if not MIN_SOUP_3_4:
-            self._received_size += len(bytes_)
-            self._check_content_overflow()
+        self._received_size += len(bytes_)
+        self._check_content_overflow()
 
         if self._output_stream is None:
             self._response_body_data += bytes_
@@ -387,9 +383,7 @@ class HTTPRequest(GObject.GObject):
                 return
 
         self._read_async()
-
-        if not MIN_SOUP_3_4:
-            self._emit_progress()
+        self._emit_progress()
 
     def _finish_read(self, error: Optional[HTTPRequestError] = None) -> None:
         self._log.info('Finished reading')
@@ -435,18 +429,6 @@ class HTTPRequest(GObject.GObject):
         self._log.info('Body received')
         self._body_received = True
 
-    def _on_got_body_data(self,
-                          _message: Soup.Message,
-                          chunk_size: int
-                          ) -> None:
-
-        self._received_size += chunk_size
-        self._check_content_overflow()
-
-        status = self._message.get_status()
-        if status in (Soup.Status.OK, Soup.Status.CREATED):
-            self._emit_progress()
-
     def _emit_progress(self) -> None:
         if not self._emit_response_progress:
             return
@@ -459,8 +441,7 @@ class HTTPRequest(GObject.GObject):
 
     def _check_content_overflow(self) -> None:
         if self._received_size > self._response_content_length:
-            self._set_error(HTTPRequestError.CONTENT_OVERFLOW)
-            self.cancel()
+            self._finish_read(HTTPRequestError.CONTENT_OVERFLOW)
 
     def _on_restarted(self, _message: Soup.Message) -> None:
         self._log.info('Restarted')



View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/compare/5afb2b4a14e62b3b5f9b0d1c2843ba9575fd5c50...618834af677a2011b4cc626cb5610fc944a16103

-- 
View it on GitLab: 
https://dev.gajim.org/gajim/python-nbxmpp/-/compare/5afb2b4a14e62b3b5f9b0d1c2843ba9575fd5c50...618834af677a2011b4cc626cb5610fc944a16103
You're receiving this email because of your account on dev.gajim.org.


_______________________________________________
Commits mailing list
[email protected]
https://lists.gajim.org/cgi-bin/listinfo/commits

Reply via email to