Требует действийможет затронуть работающую систему
Маршрутизация 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.
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-changedGetSystemProxyUri(TUri, RawUtf8, RawUtf8, TUri)added
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.
Рекомендуется обновиться
Повторно проверьте ProxyByPass и cross-origin redirects и переходите на финальный build, а не на эту промежуточную ревизию.
Публичный API
THttpClientSocket proxy routingbehaviour-changed
Модули
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.
Рекомендуется обновиться
Обновите клиенты с proxy и проверьте redirects между direct, bypassed и proxied origins.
Публичный API
HTTP_SCHEMEbehaviour-changed
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 или потерять состояние потомка.
Рекомендуется обновиться
Используйте build 2.4.17462 или новее, если legacy overloads WebSocketsConnect вызываются у подклассов вроде TServerClient.
Публичный API
THttpClientWebSockets.WebSocketsConnect legacy overloadsbehaviour-changed
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.
Рекомендуется обновиться
Приоритетно обновитесь при повторном использовании UDP или Unix-domain TCrtSocket и проверьте отклонение не-HTTP Location.
Публичный API
TCrtSocket.ReOpenbehaviour-changedTCrtSocket.OpenFrombehaviour-changed
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 с портом по умолчанию реже принимаются за другое назначение.
Рекомендуется обновиться
Возьмите финальный build, если URI поступают из конфигурации или redirects, и повторно проверьте явные и default proxy ports.
Публичный API
TUri.FromBufferbehaviour-changed
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.
Рекомендуется обновиться
Пользователям authenticated proxy следует взять финальный build и проверить ротацию credentials и ошибки подключения WebSocket.
Публичный API
THttpClientWebSockets.WebSocketsConnect(TUri, ...)signature-changed
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
Модули
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, ...)addedTHttpClientWebSockets.WebSocketsConnect(RawUtf8, TWebSocketProtocol, PHttpRequestExtendedOptions, ...)added
Модули
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
Модули
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
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
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-changedTHttpClientSocket proxy bypassbehaviour-changed
Модули
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
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-changedTUri.ServerPortsignature-changed
Модули
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
Модули
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
Модули
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
Модули
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
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_TEXTaddedSCHEME_PORTadded
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-changedWS_SCHEMEadded
Модули
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 нет; коммит лишь проясняет код и сокращает повторную подготовку тестов.
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 и сообщает ограниченную по времени ошибку вместо бесконечного зависания.
Модули
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.
Модули
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.
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 автоматических тестов меньше шума от ожидаемых исключений.
Модули
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 только из-за отсутствия сети.