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

URI redirects стабилизированы, heartbeat и sessions восстановлены

URI stack переписан по RFC 3986 с разрешением relative Location и стабилизирован к build 2.4.17187 до применения в HTTP redirects. Production получает successor fix отключённых async WebSocket heartbeats, корректные Signed URI и REST session timeouts, безопасный startup/shutdown proxy cache и опциональную direct IOCP write на Windows. Внешние вызовы ESynSspi.RaiseLastOSError требуют миграции.

Коротко

  • Переходите на head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d, build 2.4.17187, с завершённой URI/redirect серией.
  • Build 2.4.17171 восстанавливает async WebSocket heartbeat callbacks, отключённые прежним idle-loop сравнением.
  • Порядок Signed URI timestamps и REST session timeout исправлены для долгих процессов и 32-bit rollover.
  • Windows proxy cache получил direct IOCP writes и защиту от startup/background-deletion races.
  • Замените внешние вызовы ESynSspi.RaiseLastOSError на ESynSspi.RaiseSspiError.
  • Избегайте 2.4.17162–2.4.17170 для heartbeat и 2.4.17176–2.4.17186 для незавершённой URI серии.

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

Обновляйтесь до build 2.4.17187 в head 215c7bbd240419735ad7e89f5d35ddc9cfeb8b4d, не останавливаясь внутри URI rewrite. Приоритет для WebSocket, Signed URI, REST session, SOA и proxy cache. Замените ESynSspi.RaiseLastOSError на ESynSspi.RaiseSspiError и проверьте relative redirects, credentials и Windows proxy throughput.

Сборка2.4.17161 → 2.4.17187
Коммиты26
Строки+1154 -451
Чтение4 мин

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

Сюжеты
# Запись Категория Модули
1 Высокий Signed URI sessions корректно переживают tick rollover RetrieveSession сравнивает timestamps signed modular delta, обновляет last только для более нового и выравнивает startup/32-bit rollover. Безопасность mormot.rest.server 1c193929+31-25

rest: fixed TRestServerAuthenticationSignedUri.RetrieveSession parsing

Влияние

Long-running Signed URI services больше не отвергают valid timestamps около startup или tick wrap.

Модули

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

2 Высокий HTTP redirects разрешают Location через TUri THttpClientSocket заменяет ручной parsing на TUri.FromLocation, позволяет OnRedirect менять Location/options и принимает reconnect/credential/reject решения по parsed URI. Исправления mormot.net.client 150674b6+69-66

net: fixed THttpClientSocket 3xx redirection Location: parsing

Влияние

Relative, absolute и scheme-relative redirects единообразны, но initial integration требует следующего cross-origin fix.

Публичный API

  • THttpClientSocket redirect Location handlingbehaviour-changed — Использует RFC 3986-aware TUri.FromLocation.

Модули

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

3 Высокий Initial URI parser defects исправлены TUri.From/FromLocation исправляют string length, отвергают пустой explicit port, чинят types/bounds и relative-resolution output. Исправления mormot.net.sock 50b2e69c+25-37

net: fixed TUri.From/FromLocation methods

Влияние

Не используйте initial parser builds: malformed ports и некоторые lengths обрабатывались неверно.

Модули

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

4 Высокий TUri.FromScheme согласует text и enum scheme TUri.FromScheme теперь задаёт Scheme из TUriScheme вместе с UriScheme; добавлены tests HTTP, HTTPS, WS, WSS, FTP и LDAPS. Исправления mormot.net.sock 215c7bbd+14-11

net: fixed TUri.FromScheme

Влияние

URI, SameUri и Https после FromScheme получают верный scheme; 2.4.17186 мог создавать несогласованный TUri.

Публичный API

  • TUri.FromSchemebehaviour-changed — Теперь инициализирует UriScheme и Scheme.

Модули

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

5 Высокий Redirect origin checks и retry state стабилизированы THttpClientSocket считает cross-origin после parsing Location, удаляет RedirectCrossOrigin, восстанавливает HTTP state при reopen failure; FromScheme задаёт UriScheme. Исправления mormot.net.client+1 eb38a32d+10-7

net: one last set of fixes before the week-end

Влияние

Redirect credential policy использует реальную цель, а failed reconnect не оставляет client state частично изменённым.

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

6 Высокий SOA discovery учитывает активные publication timeouts TServicesPublishedInterfacesList исправляет expired/live comparisons, сохраняя valid interfaces и обновляя expiring entries. Исправления mormot.soa.core 712db4b8+9-8

soa: fixed TServicesPublishedInterfacesList timeout logic

Влияние

Service discovery с nonzero timeout больше не скрывает live services и не пропускает refresh.

Модули

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

7 Высокий Proxy-cache startup больше не race с idle worker THttpProxyServer добавляет fUrlSet readiness flag; OnIdle выходит до завершения URL initialization, устраняя random GPF. Исправления mormot.net.async 7060c16c+8-3

net: fixed random GPF at THttpProxyServer startup

Влияние

Production proxy cache избегает initialization race, способной crash процесс до завершения Start.

Модули

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

8 Высокий Proxy-cache deletion безопасно прерывается при shutdown THttpProxyServer очищает fUrlSet при Stop/IP change и проверяет его во время slow directory deletion. Исправления mormot.net.async 98ab0d20+6-3

net: hardened Proxy Cache background deletion even more

Влияние

Proxy-cache shutdown/reconfiguration избегают background access к stale URL state, снижая crash/race risk.

Модули

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

9 Высокий Async WebSocket heartbeats снова работают IdleEverySecond сравнивает текущую секунду с allowed callback time вместо ошибочного сравнения allowed с GC cutoff. Исправления mormot.net.async 505684ce+4-4

net: fixed regression in TWebSocketAsyncConnections heartbeats

Влияние

Heartbeat callbacks больше не останавливаются после memory threshold, восстанавливая liveness и stale-peer detection.

Модули

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

10 Высокий TUri parsing переписан на bounded buffers TUri.From переписан через новый public FromBuffer для scheme, user info, IPv6 authority, port, path, query и fragment. Внутреннее устройство mormot.net.sock 4dd65061+152-92

net: rewritte TUri.From() method

Влияние

URI parsing существенно меняется и получает allocation-free entry point; initial implementation требует последующих fixes.

Публичный API

  • TUri.FromBufferadded — Парсит bounded URI buffer с optional default port.
  • TUri.Frombehaviour-changed — Теперь использует новый bounded RFC-oriented parser.

Модули

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

11 Средний SSPI exceptions сообщают полученный SSPI error ESynSspi.RaiseLastOSError переименован в RaiseSspiError и использует переданный SSPI status вместо unrelated GetLastError; internal Check стал CheckOK. Несовместимые изменения mormot.lib.sspi+1 60ef8977+31-32

lib: fixed SSPI exception message

Влияние

Windows auth/TLS diagnostics становятся точными; external calls старого public helper не компилируются.

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

Найдите ESynSspi.RaiseLastOSError и замените на ESynSspi.RaiseSspiError.

Публичный API

  • ESynSspi.RaiseLastOSErrorrenamed — Переименован в RaiseSspiError и сообщает supplied SSPI status.

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

12 Средний URI validation учитывает края RFC 3986 TUri parsing запрещает colon в первом relative segment, ужесточает authority/port/Location validation и расширяет tests. Исправления mormot.net.sock 96f4f5cf+69-57

net: follow RFC 3986 for URI parsing

Влияние

Malformed redirect targets отвергаются, valid RFC 3986 relative references поддерживаются в Delphi/FPC.

Публичный API

  • TUri.From and TUri.FromLocationbehaviour-changed — Malformed RFC 3986 references отвергаются строже.

Модули

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

13 Средний Async connection GC учитывает tick rollover TAsyncConnections.OneGC использует unsigned elapsed subtraction и clamp future values для 32-bit tick wrap. Исправления mormot.net.async b67f5df7+12-10

net: fixed TAsyncConnections GC timing logic

Влияние

Long-running async Delphi/FPC servers больше не ошибаются с connection GC около timer rollover.

Модули

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

14 Средний HTTP proxy keep-alive использует специальный header THttpClientSocket отправляет Proxy-Connection: Keep-Alive для proxy traffic, сохраняя Connection для direct requests и close. Исправления mormot.net.client 6c5201e6+8-6

net: try to fix THttpClientSocket over SQUID Proxy

Влияние

Connections через SQUID-style proxy реже закрываются или обрабатываются неверно благодаря явному header.

Модули

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

15 Средний Weekly HTTP rotation срабатывает вовремя THttpRotater исправляет comparison: rotation выполняется при достижении NextTix32, а не до deadline. Исправления mormot.net.http 1fc47dc2+4-3

net: fixed regression in THttpRotater logic

Влияние

Backends с weekly HTTP log/file rotation возвращаются к правильному schedule.

Модули

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

16 Средний TSynCache сбрасывается только после deadline TSynCache.ResetIfNeeded требует nonzero fTimeoutTix и сбрасывает при достижении deadline вместо обратной проверки. Исправления mormot.core.search f975f6ac+4-3

core: fixed TSynCache.ResetIfNeeded logic

Влияние

Caches больше не очищаются до expiry и истекают в настроенный момент на Delphi/FPC.

Модули

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

17 Средний REST session expiry больше не теряет точность TAuthSession умножает SessionTimeout на MilliSecsPerMin до shift вместо раннего усечения минутного коэффициента. Исправления mormot.rest.server 75a6ffd2+3-3

rest: fixed TAuthSession timeout computation

Влияние

Delphi/FPC servers больше не завершают idle sessions немного раньше; 60 минут теряли около 36 секунд.

Модули

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

18 Средний TUri разрешает HTTP Location без allocation Public TUri.FromLocation разрешает absolute, scheme-relative, root-relative и path-relative Location по server, port и TLS context. Новые возможности mormot.net.sock 1d79356f+264-2

net: new TUri.FromLocation() method

Влияние

Delphi/FPC HTTP code может заменить ad hoc parsing одним allocation-free parser, но нужны follow-up fixes.

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

Применяйте только в 2.4.17187 и тестируйте relative Location ваших servers.

Публичный API

  • TUri.FromLocationadded — Публичный resolver Location по RFC 3986.

Модули

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

19 Средний Redirect может принудительно открыть новое HTTP connection THttpRedirectOption получил hroForceReconnect: THttpClientSocket переоткрывает socket при каждом redirect, включая same-origin. Новые возможности mormot.net.client 49fa877c+10-6

net: new hroForceReconnect option for THttpClientSocket

Влияние

Clients за SQUID/E2Guardian избегают stale/misrouted reused connections; empty default сохраняет behavior.

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

Включайте hroForceReconnect только для affected proxy paths и измерьте connection cost.

Публичный API

  • THttpRedirectOption.hroForceReconnectadded — Принудительно пересоздаёт socket при redirect.

Модули

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

20 Средний Async sockets могут обрабатывать IOCP writes напрямую TAsyncConnectionsOptions получил acoIocpWriteDirect; Windows write path может вызвать ProcessWrite напрямую до fallback queue. Производительность mormot.net.async 7966b5fb+29-14

net: new hsoIocpWriteDirect HTTP server option for IOCP

Влияние

Opt-in Windows async servers снижают dispatch overhead; Delphi/FPC POSIX paths не меняются.

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

Включайте через server option и stress-test concurrent large responses на Windows.

Публичный API

  • TAsyncConnectionsOptions.acoIocpWriteDirectadded — Запрашивает direct Windows IOCP write processing.
  • TPollAsyncSockets.ProcessWritesignature-changed — Добавлен defaulted direct-processing parameter на Windows.

Модули

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

21 Средний Windows proxy cache включает direct IOCP writes Public hsoIocpWriteDirect мапит acoIocpWriteDirect; THttpProxyServer включает его по умолчанию для Windows IOCP. Производительность mormot.net.async+1 217c0a6b+15-11

net: enhanced Proxy Cache scaling on Windows

Влияние

Windows proxy-cache получает меньше write-queue contention; non-Windows и servers без option не меняются.

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

Сравните benchmark throughput/latency Windows proxy cache.

Публичный API

  • THttpServerOption.hsoIocpWriteDirectadded — Включает direct IOCP write processing.

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

22 Низкий Tests адаптированы к translation layers и старому curl RSA timeout ослаблен под Windows PRISM, symbol discovery пропускает SynLogVectoredHandler, TFTP tests gated для проблемных curl versions. Компилятор и платформы mormot.core.log+2 6250c714+47-36

test: try to adapt to some LUTI conditions

Влияние

CI и emulated Windows получают меньше false failures; application behavior меняется только longer RSA timeout под PRISM.

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

23 Низкий URI и Location parsing получили широкие regression tests Network tests добавляют множество valid/invalid случаев From/FromLocation: authority, IPv6, ports, query, fragment и relative resolution. Тесты a22a5e2e+268-3

test: cover TUri.From/FromLocation methods as much as possible

Влияние

Application code не меняется; tests фиксируют parser contract и выявляют последующие regressions.

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

24 Низкий TUri.From coverage расширен после rewrite Network tests добавляют credentials, IPv6 literals, explicit ports, paths, queries, fragments и malformed input. Тесты d4c88e2e+33-2

tests: enhanced TUri.From() coverage

Влияние

Application code не затронут; suite поддерживает последующие parser fixes.

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

25 Низкий FromScheme получил целевые protocol tests Network tests покрывают TUri.FromScheme для HTTP, HTTPS, WS, WSS, FTP, FTPS, LDAP и LDAPS до final fix. Тесты 5ffe448e+24-2

tests: validate TUri.FromScheme method

Влияние

Application code не меняется; tests выявили defect, исправленный следующим commit.

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

26 Низкий TFTP retry expectations уточнены TFTP server tests корректируют retry и connection-count expectations для дополнительных retransmissions. Тесты 4ba0e6f5+5-5

tests: refined TFTP server expectations

Влияние

Application code не меняется; tests становятся менее хрупкими при retransmission.

Arnaud Bouchez · 06:40 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