mORMot2 DailyЕжедневный обзор коммитов апстрима

Маршрутизация proxy стабилизирована, ошибка подкласса WebSocket исправлена

В этом выпуске расширены обнаружение и обход proxy для socket- и REST-клиентов, затем исправлены маршрутизация redirect, учёт proxy credentials, socket layers и проверка URI. Добавлены WebSocket factories с options, а финальный build устраняет регрессию подкласса в legacy overloads. Прямые вызовы GetProxyForUri теперь должны передавать TUri вместо RawUtf8.

Коротко

  • GetProxyForUri теперь принимает TUri вместо RawUtf8, поэтому прямые вызовы требуют миграции исходного кода.
  • HTTP_PROXY, HTTPS_PROXY, NO_PROXY, Windows bypass lists и REST ProxyName теперь участвуют в выборе маршрута socket-клиента.
  • Cross-origin redirects, смена proxy credentials и non-TCP reconnect теперь выбирают правильный маршрут и socket layer.
  • Новые overloads THttpClientWebSockets.WebSocketsConnect принимают TUri и THttpRequestExtendedOptions; build 2.4.17462 исправляет dispatch подклассов в legacy overloads.
  • RemoveMagicFromJson удаляет JSON_BASE64_MAGIC в начале JSON-строк, не меняя обычные строки.
  • Переходите на build 2.4.17462 и не останавливайтесь на builds 2.4.17450–2.4.17461.

Рекомендации по обновлению

Переходите на финальный build 2.4.17462. Builds 2.4.17450–2.4.17461 содержат переход TUri/proxy/WebSocket до последующих исправлений redirect, socket layer, credentials, parser и подклассов. Перед сборкой найдите прямые вызовы GetProxyForUri и замените аргументы RawUtf8 на разобранный TUri; затем проверьте proxy bypass, authenticated proxies, cross-origin redirects и WebSocket subclasses.

Сборка2.4.17433 → 2.4.17462
Коммиты27
Строки+1070 -395
Чтение6 мин

27 из 27 записей · 27 коммитов в апстриме

Сюжеты
# Запись Категория Модули
1 Высокий GetProxyForUri теперь требует разобранный TUri Публичный параметр GetProxyForUri меняется с RawUtf8 на TUri. Добавлен overload GetSystemProxyUri(TUri, proxy, bypass, temp), а RawUtf8 compatibility wrapper для GetSystemProxyUri сохранён. Несовместимые изменения mormot.net.client+1 fb71148d+90-83

net: favor TUri input for proxy calculation

Влияние

Прямые вызовы GetProxyForUri('https://...') больше не компилируются в Delphi или FPC. Внутренние вызовы избегают повторного parsing и используют один normalized URI для решений proxy и bypass.

Требуется миграция

Найдите вызовы GetProxyForUri, разберите текст в TUri через TUri.From и передайте этот record в GetProxyForUri.

Публичный API

  • GetProxyForUrisignature-changed
  • GetSystemProxyUri(TUri, RawUtf8, RawUtf8, TUri)added

Arnaud Bouchez · 13:01 UTC · открыть коммит на GitHub →

2 Высокий Socket-клиенты пересчитывают bypass и proxy после cross-origin redirect THttpClientSocket добавляет SetTunnelForUri и SameTunnelForUri. OpenOptions использует настроенный ProxyByPass, SameOpenOptions сравнивает эффективный route, а cross-origin reconnect пересчитывает Tunnel перед OpenBind. Исправления mormot.net.client 162838d7+28-17

net: fixed THttpClientSocket proxy support

Влияние

Proxy bypass rules теперь применяются к начальному socket connection, а redirect на другой origin больше не сохраняет direct или proxy route первого origin.

Публичный API

  • THttpClientSocket proxy routingbehaviour-changed

Модули

Arnaud Bouchez · 13:11 UTC · открыть коммит на GitHub →

3 Высокий Redirect выполняет reconnect при изменении эффективного proxy route THttpClientSocket выделяет SameTunnelForUri и включает его в SameOpenOptions. Redirect теперь закрывает и открывает соединение заново, если назначение разрешается в другой direct или proxied route; HTTP_SCHEME принимает records usUndefined, собранные присваиванием полей. Исправления mormot.net.client+1 1b254474+24-15

net: some other proxy fixes

Влияние

Redirect больше не переиспользует socket, подключённый по неверному proxy path, поэтому запрос не уходит несовместимому peer или tunnel.

Публичный API

  • HTTP_SCHEMEbehaviour-changed

Arnaud Bouchez · 14:16 UTC · открыть коммит на GitHub →

4 Высокий Legacy WebSocket factories теперь сохраняют запрошенный производный класс клиента THttpClientWebSockets.LegacyWebSocketsConnect теперь protected class function и вызывает WebSocketsConnect через текущий класс. TPrivateRelay.NewServerClient использует cast as после TServerClient.WebSocketsConnect. Исправления mormot.net.relay+1 754f9f1f+13-9

net: fixed THttpClientWebSockets.WebSocketsConnect legacy overloads

Влияние

Legacy overloads, вызванные у потомка THttpClientWebSockets, теперь создают этот потомок. Builds 2.4.17454–2.4.17461 могли вернуть родительский класс, сорвать relay cast или потерять состояние потомка.

Публичный API

  • THttpClientWebSockets.WebSocketsConnect legacy overloadsbehaviour-changed

Arnaud · 20:50 UTC · открыть коммит на GitHub →

5 Высокий Reconnect сохраняет socket layer, а redirects отклоняют не-HTTP schemes Retry в THttpClientSocket и TCrtSocket.ConnectUri, ReOpen и OpenFrom теперь передают сохранённый TNetLayer в OpenBind. Redirect отклоняет Location, чей TUri scheme не входит в HTTP_SCHEME. Исправления mormot.net.client+1 ba80a667+15-7

net: fixed OpenBind() socket layer usage

Влияние

UDP и Unix-domain sockets больше не открываются незаметно как TCP, а HTTP redirect не может переключить клиент на неподдерживаемый scheme.

Публичный API

  • TCrtSocket.ReOpenbehaviour-changed
  • TCrtSocket.OpenFrombehaviour-changed

Arnaud Bouchez · 15:44 UTC · открыть коммит на GitHub →

6 Средний Повреждённые URI authority отклоняются, а proxy ports сравниваются согласованно TUri.FromBuffer теперь очищает Server и возвращает ошибку для пустого, состоящего из пробелов порта или неверного хвоста authority. THttpClientSocket.OpenBind подставляет порт 80 или 443 при сравнении назначения с proxy tunnel. Исправления mormot.net.client+2 22cf7d7d+102-22

net: enhanced TUri parser

Влияние

Неверный endpoint больше не оставляет частично пригодный TUri, а proxy routes с портом по умолчанию реже принимаются за другое назначение.

Публичный API

  • TUri.FromBufferbehaviour-changed

Arnaud Bouchez · 16:25 UTC · открыть коммит на GitHub →

7 Средний Повторное использование proxy учитывает credentials и возвращает WebSocket errors THttpClientSocket.SameTunnelForUri сравнивает proxy User и Password вместе с server, port и TLS. TCrtSocket.OpenBind очищает fProxyUrl и сравнивает весь tunnel, а overload WebSocketsConnect с TUri получает optional output aErrorMessage. Исправления mormot.net.client+3 7b276456+23-12

net: another set of proxy fixes

Влияние

Смена credentials для того же proxy endpoint теперь обновляет состояние маршрута вместо повторного использования соединения со старыми credentials.

Публичный API

  • THttpClientWebSockets.WebSocketsConnect(TUri, ...)signature-changed

Arnaud Bouchez · 16:04 UTC · открыть коммит на GitHub →

8 Средний Уничтожение async connection явно прерывает незавершённые записи TPollAsyncConnection.Destroy отключает SO_LINGER для normal close при пустом fWr, но устанавливает zero linger перед закрытием, если userspace write buffer ещё содержит данные, вызывая немедленный reset и discard. Исправления mormot.net.async ab20d3ec+6-3

net: tuned TPollAsyncConnection closure

Влияние

Teardown больше не пытается неоднозначно закрыть соединение с неотправленным buffered output; peer получает abortive close, если данные нельзя завершить. Завершённые записи сохраняют asynchronous close.

Публичный API

  • TPollAsyncConnection.Destroybehaviour-changed

Модули

Arnaud Bouchez · 08:40 UTC · открыть коммит на GitHub →

9 Средний WebSocket-клиенты получили factories с поддержкой URI и options THttpClientWebSockets добавляет overloads WebSocketsConnect для TUri с THttpRequestExtendedOptions и для текста URI с указателем options. Старые overloads host/port и URI сохранены через legacy helper. Новые возможности mormot.net.ws.client 04fdbef9+86-29

net: new THttpClientWebSockets.WebSocketsConnect overloads

Влияние

WebSocket connections теперь могут разделять proxy, bypass, TLS и timeout configuration с HTTP-клиентами. Не останавливайтесь на этом build: legacy subclass dispatch исправлен только в build 2.4.17462.

Публичный API

  • THttpClientWebSockets.WebSocketsConnect(TUri, var THttpRequestExtendedOptions, ...)added
  • THttpClientWebSockets.WebSocketsConnect(RawUtf8, TWebSocketProtocol, PHttpRequestExtendedOptions, ...)added

Arnaud Bouchez · 15:06 UTC · открыть коммит на GitHub →

10 Средний Префиксы magic у JSON BLOB теперь можно удалить из сериализованного текста mormot.core.json добавляет RemoveMagicFromJson(var RawUtf8). Функция сканирует quoted JSON strings, удаляет начальный UTF-8 marker JSON_BASE64_MAGIC, уплотняет уникальные строки на месте и копирует shared strings перед изменением. Новые возможности mormot.core.json e82e1227+76-2

core: new RemoveMagicFromJson() function

Влияние

Приложения могут преобразовать JSON с mORMot BLOB markers в обычный base64 JSON без повторного разбора документа; существующая сериализация не меняется до вызова функции.

Публичный API

  • RemoveMagicFromJsonadded

Модули

Arnaud Bouchez · 19:17 UTC · открыть коммит на GitHub →

11 Средний Сопоставление доменов и IP для NO_PROXY стало публичным helper mormot.net.client добавляет NoProxyMatch. Функция обрабатывает comma-delimited rules, optional leading dot, exact hosts, subdomains, literals IPv4 и IPv6 и отдельный wildcard; добавлены regression tests. Новые возможности mormot.net.client+1 530cb3f0+71-7

net: new NoProxyMatch() parsing function

Влияние

Приложения и HTTP-клиент могут применять одинаковую семантику NO_PROXY без дублирования кода сопоставления domain suffix.

Публичный API

  • NoProxyMatchadded

Arnaud Bouchez · 12:18 UTC · открыть коммит на GitHub →

12 Средний Обнаружение proxy через WinHTTP применяет системный bypass list GetWinProxyForUri оборачивает WinHttpGetProxyInfo, преобразует поля URL и Bypass и очищает выбранный proxy, когда ProxyByPassMatch принимает host URI. Также упрощено форматирование WinHTTP security errors. Новые возможности mormot.lib.winhttp+1 fa71c244+40-17

net: enhanced WinHttp API support for GetProxyForUri()

Влияние

Windows-клиенты с автоматическим обнаружением system proxy теперь подключаются напрямую к назначениям из bypass list Internet Options.

Публичный API

  • GetWinProxyForUriadded

Arnaud Bouchez · 12:04 UTC · открыть коммит на GitHub →

13 Средний Выбор socket proxy получил поддержку явного bypass list GetSystemProxyUri получает аргумент bypass и исключает совпавшие hosts до выбора forced, global или discovered proxy. THttpClientSocket передаёт THttpRequestExtendedOptions.ProxyByPass в это решение. Новые возможности mormot.net.client 0e03d2c8+17-12

net: ProxyByPass support for THttpClientSocket

Влияние

Socket-based HTTP clients теперь учитывают Windows-style bypass masks вместо отправки каждого нелокального назначения через proxy.

Публичный API

  • GetSystemProxyUrisignature-changed
  • THttpClientSocket proxy bypassbehaviour-changed

Модули

Arnaud Bouchez · 11:47 UTC · открыть коммит на GitHub →

14 Средний Обнаружение socket proxy теперь учитывает NO_PROXY на Windows и POSIX GetProxyForUri читает NO_PROXY после выбора HTTP_PROXY или HTTPS_PROXY и очищает proxy, если NoProxyMatch принимает разобранный host. Этот путь компилируется на Windows и POSIX. Новые возможности mormot.net.client+1 2e0bdd2b+22-4

net: NO_PROXY env variable support for GetProxyForUri()

Влияние

В окружениях с NO_PROXY совпавшие назначения теперь могут идти напрямую, а не через настроенный proxy, меняя доступность сети согласно переменной окружения.

Стоит взглянуть

Проверьте deployed values NO_PROXY: нужные internal hosts должны обходить proxy, а external hosts — продолжать его использовать.

Публичный API

  • GetProxyForUribehaviour-changed

Arnaud Bouchez · 12:22 UTC · открыть коммит на GitHub →

15 Средний TUri умеет нормализовать WebSocket schemes в HTTP для поиска proxy TUri.URI и TUri.ServerPort получают optional parameter NormalizeToHttp. При true records ws и wss выводятся как http и https с сохранением server, port и address. Новые возможности mormot.net.sock 6e58a86c+10-9

net: new NormalizeToHttp optional parameter to TUri.ServerPort/Uri methods

Влияние

Proxy API могут запрашивать HTTP proxy configuration для WebSocket endpoints, не теряя исходный scheme в обычном выводе TUri. Существующие вызовы совместимы благодаря default false.

Публичный API

  • TUri.URIsignature-changed
  • TUri.ServerPortsignature-changed

Модули

Arnaud Bouchez · 12:48 UTC · открыть коммит на GitHub →

16 Средний REST socket-клиенты теперь сохраняют явно заданные proxy settings TRestHttpClientSocket.InternalOpen задаёт THttpRequestExtendedOptions.Proxy='none' только при пустом Proxy. Поэтому переданные конструктору ProxyName и ProxyByPass доходят до THttpClientSocket.OpenOptions. Новые возможности mormot.rest.http.client 1f291195+5-5

rest: ProxyName support for TRestHttpClientSocket

Влияние

REST socket-клиенты впервые могут использовать явный proxy; deployments, уже передававшие ранее игнорируемые параметры, теперь изменят сетевой маршрут.

Стоит взглянуть

Если конструкторы TRestHttpClientSocket уже получают ProxyName или ProxyByPass, проверьте в staging активировавшиеся route и authentication.

Публичный API

  • TRestHttpClientSocket proxy parametersbehaviour-changed

Arnaud Bouchez · 09:59 UTC · открыть коммит на GitHub →

17 Низкий Автоматический выбор PeerCache игнорирует неактивные interfaces THttpPeerCacheSettings.GuessInterface добавляет mafUpOnly, если имя interface не задано, и сообщает об отсутствии активного local interface. Явно указанная interface всё ещё может быть down. Исправления mormot.net.server 2afaac27+8-8

net: automatic PeerCache selection require an "up" interface

Влияние

Автоматический запуск PeerCache больше не выбирает отключённый adapter с непригодным адресом; явный выбор interface сохраняет прежнее поведение.

Публичный API

  • THttpPeerCacheSettings.GuessInterfacebehaviour-changed

Модули

Arnaud Bouchez · 09:44 UTC · открыть коммит на GitHub →

18 Низкий Для Windows-style proxy bypass masks добавлен отдельный matcher mormot.net.client добавляет ProxyByPassMatch для разделённых точкой с запятой case-insensitive host masks. Реализованы wildcard и Windows rule <local> для имён без точки. Новые возможности mormot.net.client d916140c+82-2

net: new ProxyByPassMatch() parsing function

Влияние

Приложения и последующий код socket-клиента могут применять ту же bypass syntax, что и Windows proxy settings.

Публичный API

  • ProxyByPassMatchadded

Модули

Arnaud Bouchez · 11:38 UTC · открыть коммит на GitHub →

19 Низкий Tunnel tests сообщают состояние соединений и текст flags mormot.net.tunnel добавляет ToText(TTunnelLocalFlags). При ошибке отправки тест TunnelSocket логирует thread, processing, flags, local и remote port, а mormot.net.sock документирует все диапазоны SetLinger. Новые возможности mormot.net.sock+2 fbcc175f+41-11

test: added more context to Tunnel coverage

Влияние

Production behavior Tunnel не изменено; ошибки получают достаточно состояния для диагностики, а приложения могут использовать новый formatter flags.

Публичный API

  • ToText(TTunnelLocalFlags)added

Arnaud Bouchez · 08:41 UTC · открыть коммит на GitHub →

20 Низкий Имена URI scheme и порты по умолчанию стали публичными константами mormot.net.sock публикует SCHEME_TEXT и SCHEME_PORT и заменяет ими private lookup arrays в TUri. Также удалён дублированный сброс fProxyAuthHeader и расширены тесты malformed ports. Новые возможности mormot.net.client+2 7dddd3ec+25-15

net: published SCHEME_TEXT/SCHEME_PORT constants

Влияние

Прикладной код может использовать каноническое отображение scheme и port из mORMot; прочее поведение URI этим коммитом не меняется.

Публичный API

  • SCHEME_TEXTadded
  • SCHEME_PORTadded

Arnaud Bouchez · 16:37 UTC · открыть коммит на GitHub →

21 Низкий TUri.FromScheme теперь задаёт resource address одним вызовом TUri.FromScheme получает optional parameter aAddress, удаляет один начальный slash и сохраняет результат в Address. Публичный массив WS_SCHEME отображает Boolean TLS в usWs или usWss. Новые возможности mormot.net.sock 9dcadeec+12-4

net: enhanced TUri.FromScheme()

Влияние

Вызывающий код может построить полный WebSocket или HTTP TUri без отдельного присваивания Address; существующие вызовы совместимы благодаря default argument.

Публичный API

  • TUri.FromSchemesignature-changed
  • WS_SCHEMEadded

Модули

Arnaud Bouchez · 15:05 UTC · открыть коммит на GitHub →

22 Низкий JSON-тесты и разбор HTTP-строк получили нефункциональную очистку Тесты RemoveMagicFromJson переиспользуют заранее вычисленные magic strings, комментарий сканирования указывает путь SSE2, а THttpRequestContext.ProcessParseLine разворачивает Boolean-выражение в явную ветку. Внутреннее устройство mormot.core.json+2 e0b8347f+29-30

core: some code cleaning with no functional change

Влияние

Изменений для прикладного кода и runtime behavior нет; коммит лишь проясняет код и сокращает повторную подготовку тестов.

Arnaud Bouchez · 19:24 UTC · открыть коммит на GitHub →

23 Низкий Async WebSocket broadcast tests синхронизируются с завершённым upgrade TNetworkProtocols.DoTWebSocketAsyncServer заменяет отдельный broadcast thread объектом на RunTask, событиями Connected и Done, callback OnWebSocketConnect и ограниченными ожиданиями вокруг каждого broadcast. Тесты test.net.proto 836d5fff+109-47

test: rewritten TNetworkProtocols.DoTWebSocketAsyncServer

Влияние

Production code не изменён; regression test больше не гоняется с завершением WebSocket upgrade и сообщает ограниченную по времени ошибку вместо бесконечного зависания.

Модули

Arnaud Bouchez · 07:41 UTC · открыть коммит на GitHub →

24 Низкий Удаление JSON magic покрыто тестами copy-on-write и повреждённого ввода TTestCoreProcess.EncodeDecodeJSON теперь проверяет RemoveMagicFromJson на обычных, escaped, shared, пустых, property-name, repeated-marker и malformed JSON inputs, включая повторное использование buffer на месте. Тесты test.core.data cd184a55+90-2

test: cover the new RemoveMagicFromJson()

Влияние

Production code не изменён; тесты документируют границы маркера и защищают copy-on-write поведение RawUtf8.

Модули

Arnaud Bouchez · 19:18 UTC · открыть коммит на GitHub →

25 Низкий Ожидаемые ошибки database tests больше не засоряют exception logs Тесты next-ID failure внешней базы и SQLite batch rollback теперь окружают ожидаемые ошибки TSynLog.Family.ExceptionIgnoreCurrentThread и восстанавливают настройку в finally. Тесты test.orm.extdb+1 d0efb516+26-15

test: hide expected exceptions

Влияние

Runtime behavior баз данных не изменён; вывод тестов становится тише при сохранении тех же assertions ошибок и rollback.

Arnaud Bouchez · 09:22 UTC · открыть коммит на GitHub →

26 Низкий Тест 7-Zip с неверным паролем больше не логирует ожидаемое исключение TTestCoreCompression._7Zip временно устанавливает TSynLog.Family.ExceptionIgnoreCurrentThread при проверке ожидаемой ошибки неверного пароля архива и восстанавливает flag в finally. Тесты test.core.data bfa4dec9+10-5

test: hide expected exception in TTestCoreCompression._7Zip

Влияние

Production behavior сжатия не изменено; в logs автоматических тестов меньше шума от ожидаемых исключений.

Модули

Arnaud Bouchez · 10:00 UTC · открыть коммит на GitHub →

27 Низкий Тесты PeerCache корректно пропускаются без пригодной сети TNetworkProtocols._THttpPeerCache вызывает THttpPeerCacheSettings.GuessInterface до создания hook и выходит с сообщением, если нет активного local interface. Тесты test.net.proto a78c76d9+10-3

test: cleanly skip PeerCache tests if there is no network available

Влияние

Production code не изменён; offline CI и машины разработчиков больше не сообщают PeerCache failure только из-за отсутствия сети.

Модули

Arnaud Bouchez · 09:44 UTC · открыть коммит на GitHub →

Активность апстрима коммитов в день · последние 60 дней
Коммиты977
Активных дней44/60
Пик активности2026-09-30
Максимум60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13