[PR #913] [MERGED] perf(bridge): нарезка MTProto-пакетов за O(N) вместо O(N²) #70

Closed
opened 2026-07-19 11:34:37 +03:00 by mirror-bot · 0 comments

📋 Pull Request Information

Original PR: https://github.com/Flowseal/tg-ws-proxy/pull/913
Author: @f4rceful
Created: 5/30/2026
Status: ✅ Merged
Merged: 5/30/2026
Merged by: @Flowseal

Base: main ← Head: perf/msgsplitter-on2-to-on


📝 Commits (1)

  • 9cedd64 perf(bridge): split MTProto packets in O(N) instead of O(N^2)

📊 Changes

1 file changed (+30 additions, -21 deletions)

View changed files

📝 proxy/bridge.py (+30 -21)

📄 Description

MsgSplitter.split() удалял каждый разобранный пакет с начала bytearray (del self._cipher_buf[:packet_len] / del self._plain_buf[:packet_len]). Удаление с начала сдвигает весь остаток буфера, поэтому один чанк с множеством мелких пакетов деградировал до O(N²) по числу пакетов в чанке.

Теперь буфер проходится по индексу offset, а del выполняется один раз в конце вызова → нарезка O(N) от размера чанка.

Поведение

Не изменилось. Проверено дифференциальным фаззером против старой реализации: ~9000 случайных потоков с произвольной нарезкой чанков по всем трём протоколам (abridged / intermediate / padded intermediate), включая ветку отключения при нулевой длине пакета. Результаты (выданные пакеты + остаток буфера + флаг _disabled) совпадают байт-в-байт.

Замечания

  • Изменён только proxy/bridge.py, публичный API не затронут.
  • Сигнатуры приватных хелперов _next_*_len получили параметры offset/avail.

🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/Flowseal/tg-ws-proxy/pull/913 **Author:** [@f4rceful](https://github.com/f4rceful) **Created:** 5/30/2026 **Status:** ✅ Merged **Merged:** 5/30/2026 **Merged by:** [@Flowseal](https://github.com/Flowseal) **Base:** `main` ← **Head:** `perf/msgsplitter-on2-to-on` --- ### 📝 Commits (1) - [`9cedd64`](https://github.com/Flowseal/tg-ws-proxy/commit/9cedd641cd5ab31d889afe6bafee7bba4b2f8514) perf(bridge): split MTProto packets in O(N) instead of O(N^2) ### 📊 Changes **1 file changed** (+30 additions, -21 deletions) <details> <summary>View changed files</summary> 📝 `proxy/bridge.py` (+30 -21) </details> ### 📄 Description `MsgSplitter.split()` удалял каждый разобранный пакет с начала `bytearray` (`del self._cipher_buf[:packet_len]` / `del self._plain_buf[:packet_len]`). Удаление с начала сдвигает весь остаток буфера, поэтому один чанк с множеством мелких пакетов деградировал до O(N²) по числу пакетов в чанке. Теперь буфер проходится по индексу `offset`, а `del` выполняется один раз в конце вызова → нарезка O(N) от размера чанка. ## Поведение Не изменилось. Проверено дифференциальным фаззером против старой реализации: ~9000 случайных потоков с произвольной нарезкой чанков по всем трём протоколам (abridged / intermediate / padded intermediate), включая ветку отключения при нулевой длине пакета. Результаты (выданные пакеты + остаток буфера + флаг `_disabled`) совпадают байт-в-байт. ## Замечания - Изменён только `proxy/bridge.py`, публичный API не затронут. - Сигнатуры приватных хелперов `_next_*_len` получили параметры `offset`/`avail`. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
mirror-bot added the pull-request label 2026-07-19 11:34:37 +03:00
mirror-bot changed title from [PR #913] [MERGED] perf(bridge): нарезка MTProto-пакетов за O(N) вместо O(N²) to [PR #913] perf(bridge): нарезка MTProto-пакетов за O(N) вместо O(N²) 2026-07-20 04:10:59 +03:00
mirror-bot changed title from [PR #913] perf(bridge): нарезка MTProto-пакетов за O(N) вместо O(N²) to [PR #913] [MERGED] perf(bridge): нарезка MTProto-пакетов за O(N) вместо O(N²) 2026-07-20 23:14:54 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Utilities/tg-ws-proxy#70