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
