Agir maintenantpeut affecter un système en production
Le routage proxy mûrit et un piège de sous-classe WebSocket est corrigé
Cette édition étend la détection et le contournement des proxy aux clients socket et REST, puis corrige le routage des redirections, les identifiants proxy, les couches socket et la validation des URI. Elle ajoute aussi des fabriques WebSocket sensibles aux options, le build final réparant une régression de sous-classe dans leurs anciennes surcharges. Les appels directs à GetProxyForUri doivent désormais fournir un TUri au lieu d’un RawUtf8.
En bref
- GetProxyForUri accepte désormais TUri au lieu de RawUtf8 ; ses appels directs nécessitent une migration du code source.
- HTTP_PROXY, HTTPS_PROXY, NO_PROXY, les listes de contournement Windows et REST ProxyName alimentent désormais le routage du client socket.
- Les redirections cross-origin, changements d’identifiants proxy et reconnexions non-TCP choisissent maintenant le bon routage et la bonne couche socket.
- Les nouvelles surcharges THttpClientWebSockets.WebSocketsConnect acceptent TUri et THttpRequestExtendedOptions ; le build 2.4.17462 corrige le dispatch des sous-classes via les anciennes surcharges.
- RemoveMagicFromJson retire JSON_BASE64_MAGIC au début des chaînes JSON sans modifier les chaînes ordinaires.
- Adoptez le build 2.4.17462 et évitez de rester sur les builds 2.4.17450 à 2.4.17461.
Conseil de mise à jour
Adoptez le build final 2.4.17462. Les builds 2.4.17450–2.4.17461 contiennent la transition TUri/proxy/WebSocket avant les correctifs ultérieurs de redirection, couche socket, identifiants, parser et sous-classe. Avant compilation, recherchez les appels directs à GetProxyForUri et remplacez les arguments RawUtf8 par un TUri parsé ; testez ensuite le contournement proxy, les proxy authentifiés, les redirections cross-origin et les sous-classes WebSocket.
27 sur 27 entrées · 27 commits upstream
1
Élevée
GetProxyForUri exige désormais un TUri parsé
Le paramètre public de GetProxyForUri passe de RawUtf8 à TUri. Une surcharge GetSystemProxyUri(TUri, proxy, bypass, temp) est ajoutée, tandis que le wrapper de compatibilité RawUtf8 reste disponible pour GetSystemProxyUri.
Ruptures
mormot.net.client+1
fb71148d+90-83
net: favor TUri input for proxy calculation
Impact
Les appels directs GetProxyForUri('https://...') ne compilent plus sous Delphi ou FPC. Les appels internes évitent un nouveau parsing et utilisent un URI normalisé unique pour les décisions proxy et bypass.
Migration nécessaire
Recherchez les appels GetProxyForUri, parsez le texte dans un TUri avec TUri.From et transmettez ce record à GetProxyForUri.
API publique
GetProxyForUrisignature-changedGetSystemProxyUri(TUri, RawUtf8, RawUtf8, TUri)added
2
Élevée
Les clients socket recalculent le bypass et le proxy après une redirection cross-origin
THttpClientSocket ajoute SetTunnelForUri et SameTunnelForUri. OpenOptions utilise la liste ProxyByPass configurée, SameOpenOptions compare la route effective et les reconnexions cross-origin recalculent Tunnel avant OpenBind.
Correctifs
mormot.net.client
162838d7+28-17
net: fixed THttpClientSocket proxy support
Impact
Les règles de bypass s’appliquent maintenant à la connexion socket initiale, et une redirection vers une autre origine ne conserve plus la route directe ou proxy de la première origine.
Mise à jour recommandée
Retestez ProxyByPass et les redirections cross-origin, puis adoptez le build final plutôt que cette révision intermédiaire.
API publique
THttpClientSocket proxy routingbehaviour-changed
Unités
3
Élevée
Les redirections se reconnectent lorsque leur route proxy effective change
THttpClientSocket extrait SameTunnelForUri et l’intègre à SameOpenOptions. Une redirection ferme et rouvre désormais la connexion lorsque la destination résout vers une route directe ou proxy différente, et HTTP_SCHEME accepte les records usUndefined construits par affectation de champs.
Correctifs
mormot.net.client+1
1b254474+24-15
net: some other proxy fixes
Impact
Une redirection ne peut plus réutiliser un socket connecté par la mauvaise route proxy, évitant d’envoyer la requête à un peer ou tunnel incompatible.
Mise à jour recommandée
Mettez à jour les clients utilisant un proxy et testez les redirections entre origines directes, contournées et proxifiées.
API publique
HTTP_SCHEMEbehaviour-changed
4
Élevée
Les anciennes fabriques WebSocket préservent désormais la classe cliente dérivée demandée
THttpClientWebSockets.LegacyWebSocketsConnect est maintenant une class function protégée et appelle WebSocketsConnect via sa classe courante. TPrivateRelay.NewServerClient utilise un cast as après TServerClient.WebSocketsConnect.
Correctifs
mormot.net.relay+1
754f9f1f+13-9
net: fixed THttpClientWebSockets.WebSocketsConnect legacy overloads
Impact
Les anciennes surcharges appelées sur un descendant de THttpClientWebSockets construisent désormais ce descendant. Les builds 2.4.17454–2.4.17461 pouvaient renvoyer la classe parente et faire échouer un cast relay ou omettre l’état du descendant.
Mise à jour recommandée
Utilisez le build 2.4.17462 ou ultérieur si les anciennes surcharges WebSocketsConnect sont appelées sur des sous-classes comme TServerClient.
API publique
THttpClientWebSockets.WebSocketsConnect legacy overloadsbehaviour-changed
5
Élevée
Les reconnexions conservent leur couche socket et les redirections refusent les schémas non HTTP
Les retries THttpClientSocket et TCrtSocket.ConnectUri, ReOpen et OpenFrom transmettent maintenant le TNetLayer stocké à OpenBind. Le traitement des redirections refuse un Location dont le schéma TUri est hors HTTP_SCHEME.
Correctifs
mormot.net.client+1
ba80a667+15-7
net: fixed OpenBind() socket layer usage
Impact
Les sockets UDP et Unix ne se rouvrent plus silencieusement en TCP, et une redirection HTTP ne peut plus faire basculer le client vers un schéma non pris en charge.
Mise à jour recommandée
Priorisez cette mise à jour si vous réutilisez TCrtSocket en UDP ou Unix-domain et testez le rejet des Location non HTTP.
API publique
TCrtSocket.ReOpenbehaviour-changedTCrtSocket.OpenFrombehaviour-changed
6
Moyenne
Les autorités URI invalides sont rejetées et les ports proxy comparés de façon cohérente
TUri.FromBuffer efface désormais Server et échoue pour les ports vides, uniquement composés d’espaces ou les fins d’autorité invalides. THttpClientSocket.OpenBind fournit le port 80 ou 443 lors de la comparaison d’une destination avec son tunnel proxy.
Correctifs
mormot.net.client+2
22cf7d7d+102-22
net: enhanced TUri parser
Impact
Un endpoint invalide ne laisse plus un TUri partiellement utilisable, et les routes proxy avec port par défaut risquent moins d’être prises pour une destination différente.
Mise à jour recommandée
Prenez le build final si les URI peuvent venir de la configuration ou de redirections, et retestez les ports proxy explicites et par défaut.
API publique
TUri.FromBufferbehaviour-changed
7
Moyenne
La réutilisation du proxy tient compte des identifiants et expose les erreurs WebSocket
THttpClientSocket.SameTunnelForUri compare le User et Password du proxy en plus du serveur, port et TLS. TCrtSocket.OpenBind efface fProxyUrl et compare le tunnel complet, tandis que la surcharge WebSocketsConnect avec TUri reçoit une sortie optionnelle aErrorMessage.
Correctifs
mormot.net.client+3
7b276456+23-12
net: another set of proxy fixes
Impact
Changer les identifiants d’un même endpoint proxy force désormais le bon état de routage au lieu de réutiliser une connexion authentifiée avec d’anciens identifiants.
Mise à jour recommandée
Les utilisateurs de proxy authentifiés doivent prendre le build final et tester la rotation des identifiants ainsi que les échecs de connexion WebSocket.
API publique
THttpClientWebSockets.WebSocketsConnect(TUri, ...)signature-changed
8
Moyenne
La destruction des connexions async rend les écritures inachevées explicitement abortives
TPollAsyncConnection.Destroy désactive SO_LINGER pour une fermeture normale lorsque fWr est vide, mais fixe un linger nul avant fermeture si le buffer d’écriture userspace contient encore des données, provoquant un reset et discard immédiats.
Correctifs
mormot.net.async
ab20d3ec+6-3
net: tuned TPollAsyncConnection closure
Impact
La destruction ne tente plus une fermeture ambiguë avec des données bufferisées non envoyées ; le peer reçoit une fermeture abortive lorsque l’envoi ne peut être terminé. Les écritures achevées gardent une fermeture asynchrone normale.
API publique
TPollAsyncConnection.Destroybehaviour-changed
Unités
9
Moyenne
Les clients WebSocket gagnent des fabriques sensibles aux URI et options
THttpClientWebSockets ajoute des surcharges WebSocketsConnect pour TUri avec THttpRequestExtendedOptions et pour un texte URI avec un pointeur d’options. Les anciennes surcharges host/port et URI sont conservées via un helper legacy.
Nouveautés
mormot.net.ws.client
04fdbef9+86-29
net: new THttpClientWebSockets.WebSocketsConnect overloads
Impact
Les connexions WebSocket peuvent partager la configuration proxy, bypass, TLS et délais des clients HTTP. Ne restez pas sur ce build d’introduction car le dispatch des sous-classes legacy n’est corrigé qu’au build 2.4.17462.
API publique
THttpClientWebSockets.WebSocketsConnect(TUri, var THttpRequestExtendedOptions, ...)addedTHttpClientWebSockets.WebSocketsConnect(RawUtf8, TWebSocketProtocol, PHttpRequestExtendedOptions, ...)added
Unités
10
Moyenne
Les préfixes magic des BLOB JSON peuvent désormais être retirés du texte sérialisé
mormot.core.json ajoute RemoveMagicFromJson(var RawUtf8). La fonction parcourt les chaînes JSON, retire un marqueur UTF-8 JSON_BASE64_MAGIC placé en tête, compacte en place les chaînes uniques et copie les chaînes partagées avant modification.
Nouveautés
mormot.core.json
e82e1227+76-2
core: new RemoveMagicFromJson() function
Impact
Les applications peuvent convertir un JSON mORMot marqué pour les BLOB en JSON base64 standard sans reparsing du document ; la sérialisation existante ne change pas tant que la fonction n’est pas appelée.
API publique
RemoveMagicFromJsonadded
Unités
11
Moyenne
Le matching NO_PROXY des domaines et IP devient un helper public réutilisable
mormot.net.client ajoute NoProxyMatch. La fonction gère les règles séparées par virgule, le point initial optionnel, les hosts exacts, sous-domaines, littéraux IPv4 et IPv6 et un wildcard seul, avec tests de régression.
Nouveautés
mormot.net.client+1
530cb3f0+71-7
net: new NoProxyMatch() parsing function
Impact
Les applications et le client HTTP peuvent appliquer une sémantique NO_PROXY cohérente sans dupliquer le code de matching des suffixes de domaine.
API publique
NoProxyMatchadded
12
Moyenne
La détection proxy WinHTTP applique la liste de contournement système
GetWinProxyForUri encapsule WinHttpGetProxyInfo, convertit ses champs URL et Bypass et efface le proxy choisi lorsque ProxyByPassMatch accepte le host de l’URI. Le formatage des erreurs de sécurité WinHTTP est aussi simplifié.
Nouveautés
mormot.lib.winhttp+1
fa71c244+40-17
net: enhanced WinHttp API support for GetProxyForUri()
Impact
Les clients Windows utilisant la détection automatique du proxy système se connectent désormais directement aux destinations de la liste de contournement des Options Internet.
API publique
GetWinProxyForUriadded
13
Moyenne
La sélection du proxy socket gagne le support explicite des listes de contournement
GetSystemProxyUri reçoit un argument bypass et exclut les hosts correspondants avant de choisir un proxy forcé, global ou détecté. THttpClientSocket transmet THttpRequestExtendedOptions.ProxyByPass à cette décision.
Nouveautés
mormot.net.client
0e03d2c8+17-12
net: ProxyByPass support for THttpClientSocket
Impact
Les clients HTTP basés sur socket peuvent désormais respecter les masques de bypass de style Windows au lieu d’envoyer toute destination non locale via le proxy.
API publique
GetSystemProxyUrisignature-changedTHttpClientSocket proxy bypassbehaviour-changed
Unités
14
Moyenne
La détection du proxy socket respecte désormais NO_PROXY sous Windows et POSIX
GetProxyForUri lit NO_PROXY après sélection de HTTP_PROXY ou HTTPS_PROXY et efface le proxy lorsque NoProxyMatch accepte le host parsé. Le même chemin compile sous Windows et POSIX.
Nouveautés
mormot.net.client+1
2e0bdd2b+22-4
net: NO_PROXY env variable support for GetProxyForUri()
Impact
Les environnements définissant NO_PROXY peuvent désormais envoyer directement les destinations correspondantes au lieu de passer par le proxy configuré, conformément à la variable d’environnement.
À regarder
Vérifiez les valeurs NO_PROXY déployées et testez que les hosts internes requis contournent le proxy tandis que les hosts externes l’utilisent toujours.
API publique
GetProxyForUribehaviour-changed
15
Moyenne
TUri peut normaliser les schémas WebSocket en HTTP pour chercher un proxy
TUri.URI et TUri.ServerPort reçoivent un paramètre optionnel NormalizeToHttp. À true, les records ws et wss sont émis en http et https tout en conservant serveur, port et adresse.
Nouveautés
mormot.net.sock
6e58a86c+10-9
net: new NormalizeToHttp optional parameter to TUri.ServerPort/Uri methods
Impact
Les API proxy peuvent interroger la configuration HTTP pour des endpoints WebSocket sans perdre le schéma original dans la sortie TUri normale. Les appels existants restent compatibles grâce à false par défaut.
API publique
TUri.URIsignature-changedTUri.ServerPortsignature-changed
Unités
16
Moyenne
Les clients REST socket conservent désormais les réglages proxy explicites
TRestHttpClientSocket.InternalOpen ne force THttpRequestExtendedOptions.Proxy à 'none' que si Proxy est vide. Les valeurs ProxyName et ProxyByPass fournies au constructeur atteignent donc THttpClientSocket.OpenOptions.
Nouveautés
mormot.rest.http.client
1f291195+5-5
rest: ProxyName support for TRestHttpClientSocket
Impact
Les clients REST socket peuvent utiliser un proxy explicite pour la première fois ; les déploiements qui fournissaient déjà ces paramètres auparavant ignorés changeront maintenant de route réseau.
À regarder
Si vos constructeurs TRestHttpClientSocket reçoivent déjà ProxyName ou ProxyByPass, vérifiez en staging la route et l’authentification désormais actives.
API publique
TRestHttpClientSocket proxy parametersbehaviour-changed
Unités
17
Faible
La sélection automatique PeerCache ignore les interfaces inactives
THttpPeerCacheSettings.GuessInterface ajoute mafUpOnly lorsqu’aucun nom d’interface n’est fourni et indique qu’aucune interface locale active n’a été trouvée. Une interface nommée explicitement peut toujours être inactive.
Correctifs
mormot.net.server
2afaac27+8-8
net: automatic PeerCache selection require an "up" interface
Impact
Le démarrage automatique de PeerCache ne choisit plus un adaptateur déconnecté produisant une adresse inutilisable ; la sélection explicite conserve son comportement précédent.
API publique
THttpPeerCacheSettings.GuessInterfacebehaviour-changed
Unités
18
Faible
Les masques de contournement proxy de style Windows gagnent un matcher dédié
mormot.net.client ajoute ProxyByPassMatch pour des masques de host séparés par point-virgule et insensibles à la casse. La fonction implémente les wildcards et la règle Windows <local> pour les noms sans point.
Nouveautés
mormot.net.client
d916140c+82-2
net: new ProxyByPassMatch() parsing function
Impact
Les applications et le code client socket suivant peuvent évaluer la même syntaxe de contournement que les réglages proxy Windows.
API publique
ProxyByPassMatchadded
Unités
19
Faible
Les tests Tunnel rapportent l’état des connexions et exposent le texte des flags
mormot.net.tunnel ajoute ToText(TTunnelLocalFlags). En cas d’échec, les envois du test TunnelSocket loguent thread, processing, flags, port local et port distant, et mormot.net.sock documente toutes les plages de SetLinger.
Nouveautés
mormot.net.sock+2
fbcc175f+41-11
test: added more context to Tunnel coverage
Impact
Le comportement Tunnel en production est inchangé ; les échecs gagnent assez d’état pour le diagnostic et les applications peuvent réutiliser le nouveau formatter de flags.
API publique
ToText(TTunnelLocalFlags)added
20
Faible
Les noms de schéma URI et ports par défaut deviennent des constantes publiques
mormot.net.sock publie SCHEME_TEXT et SCHEME_PORT et remplace les tableaux privés dans TUri. Le commit retire aussi une remise à zéro dupliquée de fProxyAuthHeader et étend les tests de ports invalides.
Nouveautés
mormot.net.client+2
7dddd3ec+25-15
net: published SCHEME_TEXT/SCHEME_PORT constants
Impact
Le code applicatif peut réutiliser le mapping canonique des schémas et ports de mORMot ; ce commit ne change pas autrement le comportement des URI.
API publique
SCHEME_TEXTaddedSCHEME_PORTadded
21
Faible
TUri.FromScheme peut initialiser l’adresse de ressource en un appel
TUri.FromScheme reçoit un paramètre optionnel aAddress, retire un slash initial et stocke le résultat dans Address. Le tableau public WS_SCHEME mappe un booléen TLS vers usWs ou usWss.
Nouveautés
mormot.net.sock
9dcadeec+12-4
net: enhanced TUri.FromScheme()
Impact
Les appels peuvent construire un TUri WebSocket ou HTTP complet sans affecter Address séparément ; les appels existants restent compatibles grâce à la valeur par défaut.
API publique
TUri.FromSchemesignature-changedWS_SCHEMEadded
Unités
22
Faible
Les tests JSON et le parsing des lignes HTTP reçoivent un nettoyage sans effet fonctionnel
Les tests RemoveMagicFromJson réutilisent des chaînes magic précalculées, le commentaire du scan mentionne le chemin SSE2 et THttpRequestContext.ProcessParseLine développe une expression booléenne en branche explicite.
Sous le capot
mormot.core.json+2
e0b8347f+29-30
core: some code cleaning with no functional change
Impact
Aucun changement pour le code applicatif ni le comportement runtime ; ce commit clarifie le code et réduit la préparation répétée des tests.
23
Faible
Les tests de broadcast WebSocket async se synchronisent avec l’upgrade terminé
TNetworkProtocols.DoTWebSocketAsyncServer remplace le thread de broadcast dédié par un objet basé sur RunTask, des événements Connected et Done, un callback OnWebSocketConnect et des attentes bornées autour de chaque broadcast.
Tests
test.net.proto
836d5fff+109-47
test: rewritten TNetworkProtocols.DoTWebSocketAsyncServer
Impact
Le code de production est inchangé ; le test de régression ne course plus la fin de l’upgrade WebSocket et signale un échec borné au lieu de rester bloqué indéfiniment.
Unités
24
Faible
Le retrait du magic JSON gagne une couverture copy-on-write et entrées invalides
TTestCoreProcess.EncodeDecodeJSON couvre désormais RemoveMagicFromJson avec des entrées JSON normales, échappées, partagées, vides, des noms de propriétés, des marqueurs répétés et des entrées invalides, y compris la réutilisation du buffer en place.
Tests
test.core.data
cd184a55+90-2
test: cover the new RemoveMagicFromJson()
Impact
Le code de production est inchangé ; les tests documentent les limites du marqueur et protègent le comportement copy-on-write de RawUtf8.
Unités
25
Faible
Les échecs attendus des tests de base de données ne polluent plus les logs d’exception
Les tests d’échec next-ID des bases externes et de rollback batch SQLite encadrent désormais les erreurs attendues avec TSynLog.Family.ExceptionIgnoreCurrentThread et restaurent le réglage dans des blocs finally.
Tests
test.orm.extdb+1
d0efb516+26-15
test: hide expected exceptions
Impact
Le comportement runtime des bases est inchangé ; la sortie des tests devient plus silencieuse tout en conservant les mêmes assertions d’échec et de rollback.
26
Faible
Le test 7-Zip avec mauvais mot de passe ne journalise plus une exception attendue
TTestCoreCompression._7Zip active temporairement TSynLog.Family.ExceptionIgnoreCurrentThread pendant la vérification de l’échec attendu avec un mauvais mot de passe, puis restaure le flag dans finally.
Tests
test.core.data
bfa4dec9+10-5
test: hide expected exception in TTestCoreCompression._7Zip
Impact
Le comportement de compression en production est inchangé ; les logs de tests automatisés contiennent moins de bruit d’exceptions attendues.
Unités
27
Faible
Les tests PeerCache sont ignorés proprement sans réseau utilisable
TNetworkProtocols._THttpPeerCache appelle THttpPeerCacheSettings.GuessInterface avant de créer le hook et quitte avec une raison affichée lorsqu’aucune interface locale active n’est disponible.
Tests
test.net.proto
a78c76d9+10-3
test: cleanly skip PeerCache tests if there is no network available
Impact
Le code de production est inchangé ; la CI offline et les machines de développement ne signalent plus un échec PeerCache dû uniquement à l’absence de réseau.