This is an automated email from the ASF dual-hosted git repository. bneradt pushed a commit to branch 11-Dev in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 58a2ea1f4f39e2a8f76d944ddae47400d72cbf5d Merge: c8cb8ccaf9 28710feefb Author: bneradt <bner...@yahooinc.com> AuthorDate: Wed Jun 4 10:47:58 2025 -0500 Merge ASF master into 11-Dev Conflicts: src/api/InkAPI.cc doc/admin-guide/files/records.yaml.en.rst | 2 +- doc/admin-guide/files/sni.yaml.en.rst | 5 + doc/admin-guide/plugins/compress.en.rst | 24 +- .../api/functions/TSHttpTxnServerRespGet.en.rst | 2 +- doc/developer-guide/core-architecture/heap.en.rst | 17 +- include/iocore/cache/Cache.h | 18 +- include/iocore/cache/CacheDefs.h | 16 +- include/iocore/cache/HttpTransactCache.h | 8 +- include/iocore/eventsystem/ProxyAllocator.h | 10 + include/iocore/net/ConnectionTracker.h | 77 +- include/iocore/net/TLSBasicSupport.h | 1 + include/iocore/net/YamlSNIConfig.h | 2 + include/iocore/net/quic/MTHashTable.h | 7 +- include/iocore/net/quic/QUICApplicationMap.h | 15 +- include/mgmt/config/FileManager.h | 2 +- include/proxy/CacheControl.h | 24 +- include/proxy/ControlBase.h | 26 +- include/proxy/ControlMatcher.h | 22 +- include/proxy/FetchSM.h | 2 +- include/proxy/IPAllow.h | 2 +- include/proxy/ParentConsistentHash.h | 14 +- include/proxy/ParentSelection.h | 77 +- include/proxy/Plugin.h | 2 +- include/proxy/PluginVC.h | 20 +- include/proxy/PoolableSession.h | 8 +- include/proxy/ProtocolProbeSessionAccept.h | 10 +- include/proxy/hdrs/HTTP.h | 403 ++--- include/proxy/hdrs/HdrHeap.h | 43 +- include/proxy/hdrs/HdrToken.h | 62 +- include/proxy/hdrs/MIME.h | 34 +- include/proxy/hdrs/URL.h | 22 +- include/proxy/hdrs/VersionConverter.h | 14 +- include/proxy/hdrs/XPACK.h | 4 +- include/proxy/http/Http1ClientSession.h | 26 +- include/proxy/http/Http1ServerSession.h | 8 +- include/proxy/http/HttpBodyFactory.h | 4 +- include/proxy/http/HttpCacheSM.h | 18 +- include/proxy/http/HttpConfig.h | 32 +- include/proxy/http/HttpSM.h | 68 +- include/proxy/http/HttpSessionManager.h | 8 +- include/proxy/http/HttpTransact.h | 355 ++-- include/proxy/http/HttpTunnel.h | 61 +- include/proxy/http/HttpUserAgent.h | 6 +- include/proxy/http/HttpVCTable.h | 16 +- include/proxy/http/remap/NextHopConsistentHash.h | 20 +- .../proxy/http/remap/NextHopSelectionStrategy.h | 30 +- include/proxy/http/remap/UrlRewrite.h | 2 +- include/proxy/http2/Http2DependencyTree.h | 63 +- include/proxy/http2/Http2Stream.h | 4 +- include/proxy/logging/LogFile.h | 14 +- include/proxy/logging/LogObject.h | 6 +- include/proxy/shared/DiagsConfig.h | 6 +- include/records/RecYAMLDefs.h | 10 + include/ts/apidefs.h.in | 10 + include/ts/ts.h | 25 + include/tscore/Allocator.h | 28 +- include/tscore/BaseLogFile.h | 14 +- include/tscore/ConsistentHash.h | 3 +- include/tscpp/api/AsyncHttpFetch.h | 2 +- include/tscpp/api/ClientRequest.h | 2 +- include/tscpp/api/GlobalPlugin.h | 2 +- include/tscpp/api/GzipDeflateTransformation.h | 2 +- include/tscpp/api/GzipInflateTransformation.h | 2 +- include/tscpp/api/Headers.h | 7 +- include/tscpp/api/Logger.h | 2 +- include/tscpp/api/Request.h | 6 +- include/tscpp/api/Response.h | 6 +- include/tscpp/api/Transaction.h | 6 +- include/tscpp/api/TransactionPlugin.h | 2 +- include/tscpp/api/TransformationPlugin.h | 6 +- include/tscpp/api/Url.h | 7 +- include/tsutil/Metrics.h | 12 +- plugins/cachekey/common.h | 1 + plugins/cachekey/configs.cc | 26 +- plugins/cachekey/pattern.cc | 28 +- plugins/cachekey/pattern.h | 10 +- plugins/cachekey/plugin.cc | 9 +- plugins/compress/compress.cc | 43 +- plugins/compress/configuration.cc | 16 +- plugins/compress/configuration.h | 9 +- .../experimental/access_control/access_control.h | 5 +- plugins/experimental/access_control/config.cc | 20 +- plugins/experimental/access_control/config.h | 4 +- plugins/experimental/access_control/pattern.cc | 32 +- plugins/experimental/access_control/pattern.h | 10 +- plugins/experimental/access_control/plugin.cc | 10 +- plugins/experimental/cookie_remap/cookie_remap.cc | 27 +- plugins/experimental/inliner/cache.h | 13 +- plugins/experimental/inliner/fetcher.h | 29 +- plugins/experimental/inliner/ts.cc | 8 +- plugins/experimental/inliner/ts.h | 8 +- plugins/experimental/magick/magick.cc | 17 +- plugins/experimental/mp4/mp4.cc | 4 +- plugins/experimental/mp4/mp4_common.h | 11 +- plugins/experimental/mp4/mp4_meta.cc | 42 +- plugins/experimental/mp4/mp4_meta.h | 10 +- plugins/experimental/rate_limit/ip_reputation.cc | 40 +- plugins/experimental/rate_limit/ip_reputation.h | 17 +- plugins/experimental/rate_limit/sni_selector.cc | 29 +- plugins/experimental/rate_limit/sni_selector.h | 88 +- plugins/header_rewrite/condition.h | 17 +- plugins/header_rewrite/conditions.cc | 148 +- plugins/header_rewrite/value.cc | 5 +- plugins/header_rewrite/value.h | 11 +- plugins/multiplexer/dispatch.cc | 2 +- plugins/multiplexer/fetcher.h | 49 +- plugins/multiplexer/ts.cc | 4 +- plugins/multiplexer/ts.h | 4 +- plugins/prefetch/configs.cc | 5 +- plugins/prefetch/pattern.cc | 15 +- plugins/prefetch/pattern.h | 6 +- src/api/InkAPI.cc | 191 +- src/api/InkAPITest.cc | 13 + src/iocore/aio/AIO.cc | 10 +- src/iocore/aio/test_AIO.cc | 14 +- src/iocore/cache/Cache.cc | 40 +- src/iocore/cache/CacheDir.cc | 11 - src/iocore/cache/CacheDisk.cc | 12 +- src/iocore/cache/CacheHosting.cc | 30 +- src/iocore/cache/CacheProcessor.cc | 95 +- src/iocore/cache/CacheRead.cc | 10 +- src/iocore/cache/CacheTest.cc | 33 +- src/iocore/cache/CacheVC.cc | 2 +- src/iocore/cache/HttpTransactCache.cc | 42 +- src/iocore/cache/P_CacheDir.h | 2 - src/iocore/cache/P_CacheDisk.h | 38 +- src/iocore/cache/P_CacheHosting.h | 28 +- src/iocore/cache/P_CacheHttp.h | 5 - src/iocore/cache/P_CacheInternal.h | 14 +- src/iocore/cache/Stripe.h | 2 +- src/iocore/cache/unit_tests/main.cc | 14 +- src/iocore/cache/unit_tests/test_CacheDir.cc | 2 +- src/iocore/cache/unit_tests/test_CacheVol.cc | 22 +- src/iocore/dns/P_SplitDNSProcessor.h | 3 +- src/iocore/dns/SplitDNS.cc | 11 +- src/iocore/eventsystem/RecProcess.cc | 12 +- src/iocore/hostdb/P_RefCountCache.h | 14 +- src/iocore/hostdb/benchmark_HostDB.cc | 13 +- src/iocore/hostdb/test_RefCountCache.cc | 24 +- src/iocore/net/ConnectionTracker.cc | 175 +- src/iocore/net/P_QUICNetVConnection.h | 4 +- src/iocore/net/P_QUICPacketHandler.h | 6 +- src/iocore/net/P_SSLCertLookup.h | 4 +- src/iocore/net/ProxyProtocol.cc | 2 + src/iocore/net/QUICNetVConnection.cc | 12 +- src/iocore/net/QUICPacketHandler.cc | 9 +- src/iocore/net/SNIActionPerformer.cc | 19 + src/iocore/net/SNIActionPerformer.h | 15 + src/iocore/net/SSLCertLookup.cc | 11 +- src/iocore/net/SSLSNIConfig.cc | 1 + src/iocore/net/Socks.cc | 10 +- src/iocore/net/TLSBasicSupport.cc | 7 + src/iocore/net/YamlSNIConfig.cc | 8 +- src/iocore/net/quic/QUICApplicationMap.cc | 6 +- src/iocore/net/unit_tests/sni_conf_test.yaml | 13 + src/iocore/net/unit_tests/test_SSLSNIConfig.cc | 80 +- src/iocore/net/unit_tests/test_YamlSNIConfig.cc | 2 +- src/mgmt/config/FileManager.cc | 23 +- src/proxy/CacheControl.cc | 71 +- src/proxy/ControlBase.cc | 185 +- src/proxy/ControlMatcher.cc | 26 +- src/proxy/FetchSM.cc | 24 +- src/proxy/IPAllow.cc | 16 +- src/proxy/ParentConsistentHash.cc | 26 +- src/proxy/ParentRoundRobin.cc | 38 +- src/proxy/ParentSelection.cc | 310 ++-- src/proxy/ParentSelectionStrategy.cc | 8 +- src/proxy/Plugin.cc | 15 +- src/proxy/PluginVC.cc | 52 +- src/proxy/ProtocolProbeSessionAccept.cc | 16 +- src/proxy/ReverseProxy.cc | 2 +- src/proxy/Transform.cc | 2 +- src/proxy/hdrs/HTTP.cc | 212 +-- src/proxy/hdrs/HdrHeap.cc | 100 +- src/proxy/hdrs/HdrTSOnly.cc | 14 +- src/proxy/hdrs/HdrToken.cc | 277 +-- src/proxy/hdrs/MIME.cc | 98 +- src/proxy/hdrs/URL.cc | 70 +- src/proxy/hdrs/VersionConverter.cc | 58 +- src/proxy/hdrs/XPACK.cc | 2 +- src/proxy/hdrs/load_http_hdr.cc | 42 +- src/proxy/hdrs/unit_tests/test_HdrUtils.cc | 6 +- src/proxy/hdrs/unit_tests/test_Hdrs.cc | 278 ++- src/proxy/hdrs/unit_tests/test_HeaderValidator.cc | 36 +- src/proxy/hdrs/unit_tests/test_URL.cc | 14 +- src/proxy/http/Http1ClientSession.cc | 34 +- src/proxy/http/Http1ServerSession.cc | 30 +- src/proxy/http/HttpBodyFactory.cc | 29 +- src/proxy/http/HttpCacheSM.cc | 117 +- src/proxy/http/HttpConfig.cc | 2 +- src/proxy/http/HttpDebugNames.cc | 224 +-- src/proxy/http/HttpProxyServerMain.cc | 4 +- src/proxy/http/HttpSM.cc | 1077 +++++------ src/proxy/http/HttpSessionAccept.cc | 2 +- src/proxy/http/HttpSessionManager.cc | 42 +- src/proxy/http/HttpTransact.cc | 1874 ++++++++++---------- src/proxy/http/HttpTransactHeaders.cc | 98 +- src/proxy/http/HttpTunnel.cc | 211 +-- src/proxy/http/HttpVCTable.cc | 4 +- src/proxy/http/RegressionHttpTransact.cc | 2 +- src/proxy/http/remap/NextHopConsistentHash.cc | 82 +- src/proxy/http/remap/NextHopHealthStatus.cc | 8 +- src/proxy/http/remap/NextHopRoundRobin.cc | 24 +- src/proxy/http/remap/NextHopSelectionStrategy.cc | 51 +- src/proxy/http/remap/NextHopStrategyFactory.cc | 26 +- src/proxy/http/remap/RemapConfig.cc | 49 +- src/proxy/http/remap/RemapProcessor.cc | 4 +- src/proxy/http/remap/UrlRewrite.cc | 44 +- .../http/remap/unit-tests/nexthop_test_stubs.cc | 2 +- .../remap/unit-tests/test_NextHopConsistentHash.cc | 100 +- .../remap/unit-tests/test_NextHopRoundRobin.cc | 26 +- .../unit-tests/test_NextHopStrategyFactory.cc | 220 +-- .../http/remap/unit-tests/test_PluginFactory.cc | 141 +- src/proxy/http/unit_tests/test_HttpTransact.cc | 24 +- src/proxy/http2/HPACK.cc | 2 +- src/proxy/http2/HTTP2.cc | 10 +- src/proxy/http2/Http2ConnectionState.cc | 2 +- src/proxy/http2/Http2SessionAccept.cc | 2 +- src/proxy/http2/Http2Stream.cc | 26 +- src/proxy/http2/test_HPACK.cc | 8 +- src/proxy/http2/unit_tests/test_HTTP2.cc | 10 +- .../http2/unit_tests/test_HpackIndexingTable.cc | 16 +- .../http2/unit_tests/test_Http2DependencyTree.cc | 126 +- src/proxy/http3/Http3HeaderFramer.cc | 10 +- src/proxy/http3/Http3HeaderVIOAdaptor.cc | 6 +- src/proxy/http3/Http3SessionAccept.cc | 2 +- src/proxy/http3/Http3Transaction.cc | 8 +- src/proxy/http3/test/test_QPACK.cc | 19 +- src/proxy/logging/Log.cc | 82 +- src/proxy/logging/LogAccess.cc | 22 +- src/proxy/logging/LogBuffer.cc | 2 +- src/proxy/logging/LogFile.cc | 3 +- src/proxy/logging/LogObject.cc | 7 +- src/proxy/shared/DiagsConfig.cc | 13 +- src/records/RecYAMLDecoder.cc | 8 +- src/records/RecordsConfig.cc | 6 +- src/traffic_cache_tool/CacheScan.cc | 36 +- src/traffic_cache_tool/CacheScan.h | 8 +- src/traffic_cache_tool/CacheTool.cc | 39 +- src/traffic_logstats/logstats.cc | 157 +- src/traffic_server/traffic_server.cc | 20 +- src/traffic_top/stats.h | 42 +- src/tscore/BaseLogFile.cc | 11 +- src/tscore/ConsistentHash.cc | 13 +- src/tscore/unit_tests/test_PriorityQueue.cc | 502 ++---- src/tscore/unit_tests/test_arena.cc | 19 +- src/tscpp/api/AsyncHttpFetch.cc | 7 +- src/tscpp/api/ClientRequest.cc | 4 +- src/tscpp/api/GlobalPlugin.cc | 5 +- src/tscpp/api/GzipDeflateTransformation.cc | 7 +- src/tscpp/api/GzipInflateTransformation.cc | 7 +- src/tscpp/api/Headers.cc | 46 +- src/tscpp/api/Logger.cc | 4 +- src/tscpp/api/Request.cc | 7 +- src/tscpp/api/Response.cc | 7 +- src/tscpp/api/Transaction.cc | 3 +- src/tscpp/api/TransactionPlugin.cc | 3 +- src/tscpp/api/TransformationPlugin.cc | 13 +- src/tscpp/api/Url.cc | 9 +- src/tscpp/api/utils_internal.h | 2 +- src/tsutil/Metrics.cc | 18 +- tests/fuzzing/fuzz_hpack.cc | 2 +- tests/fuzzing/fuzz_http.cc | 12 +- .../chunked_encoding/bad_chunked_encoding.test.py | 21 + .../replays/malformed_chunked_header.replay.yaml | 40 + .../next_hop/strategies_ch2/strategies_ch2.test.py | 3 +- .../gold_tests/next_hop/strategies_ch2/trace.gold | 164 +- .../next_hop/zzz_strategies_peer/trace.gold | 96 +- .../zzz_strategies_peer.test.py | 2 +- .../next_hop/zzz_strategies_peer2/trace.gold | 62 +- .../zzz_strategies_peer2.test.py | 2 +- .../origin_connection/gold/two_200_ok.gold | 9 + .../per_server_connection_max.test.py | 58 +- .../pluginTest/compress/compress-range.test.py | 16 +- ...ig => cache-true-remove-accept-encoding.config} | 2 +- ...range.config => cache-true-remove-range.config} | 2 +- .../compress/replay/compress-and-range.replay.yaml | 46 +- tests/gold_tests/pluginTest/tsapi/CMakeLists.txt | 1 + .../pluginTest/tsapi/test_TSVConnPPInfo.cc | 118 ++ .../pluginTest/tsapi/test_TSVConnPPInfo.test.py | 98 + .../pluginTest/tsapi/test_TSVConnPPInfo_curl0.gold | 1 + .../pluginTest/tsapi/test_TSVConnPPInfo_curl1.gold | 1 + .../tsapi/test_TSVConnPPInfo_plugin_log.gold | 2 + tests/gold_tests/tls/tls_sni_groups.test.py | 104 ++ tools/benchmark/benchmark_ProxyAllocator.cc | 4 +- tools/gdb-helpers.py | 300 +++- 286 files changed, 6928 insertions(+), 6008 deletions(-) diff --cc src/api/InkAPI.cc index a5f026fb7a,c103f2d0c6..ce5e12f61c --- a/src/api/InkAPI.cc +++ b/src/api/InkAPI.cc @@@ -8442,6 -8445,131 +8443,76 @@@ TSVConnReenableEx(TSVConn vconn, TSEven } } + TSReturnCode + TSVConnPPInfoGet(TSVConn vconn, uint16_t key, const char **value, int *length) + { + NetVConnection *vc = reinterpret_cast<NetVConnection *>(vconn); + + if (key < 0x100) { + auto &tlv = vc->get_proxy_protocol_info().tlv; + if (auto ite = tlv.find(key); ite != tlv.end()) { + *value = ite->second.data(); + *length = ite->second.length(); + } else { + return TS_ERROR; + } + } else { + switch (key) { + case TS_PP_INFO_SRC_ADDR: + *value = reinterpret_cast<const char *>(vc->get_proxy_protocol_src_addr()); + if (*value == nullptr) { + return TS_ERROR; + } + *length = ats_ip_size(reinterpret_cast<const sockaddr *>(*value)); + break; + case TS_PP_INFO_DST_ADDR: + *value = reinterpret_cast<const char *>(vc->get_proxy_protocol_dst_addr()); + if (*value == nullptr) { + return TS_ERROR; + } + *length = ats_ip_size(reinterpret_cast<const sockaddr *>(*value)); + break; + default: + return TS_ERROR; + } + } + + return TS_SUCCESS; + } + + TSReturnCode + TSVConnPPInfoIntGet(TSVConn vconn, uint16_t key, TSMgmtInt *value) + { + NetVConnection *vc = reinterpret_cast<NetVConnection *>(vconn); + + if (key < 0x100) { + // Unknown type value cannot be returned as an integer + return TS_ERROR; + } else { + switch (key) { + case TS_PP_INFO_VERSION: + *value = static_cast<TSMgmtInt>(vc->get_proxy_protocol_version()); + break; + case TS_PP_INFO_SRC_PORT: + *value = static_cast<TSMgmtInt>(vc->get_proxy_protocol_src_port()); + break; + case TS_PP_INFO_DST_PORT: + *value = static_cast<TSMgmtInt>(vc->get_proxy_protocol_dst_port()); + break; + case TS_PP_INFO_PROTOCOL: + *value = static_cast<TSMgmtInt>(vc->get_proxy_protocol_info().ip_family); + break; + case TS_PP_INFO_SOCK_TYPE: + *value = static_cast<TSMgmtInt>(vc->get_proxy_protocol_info().type); + break; + default: + return TS_ERROR; + } + } + + return TS_SUCCESS; + } + -TSSslSession -TSSslSessionGet(const TSSslSessionID *session_id) -{ - SSL_SESSION *session = nullptr; - if (session_id && session_cache) { - session_cache->getSession(reinterpret_cast<const SSLSessionID &>(*session_id), &session, nullptr); - } - return reinterpret_cast<TSSslSession>(session); -} - -int -TSSslSessionGetBuffer(const TSSslSessionID *session_id, char *buffer, int *len_ptr) -{ - int true_len = 0; - // Don't get if there is no session id or the cache is not yet set up - if (session_id && session_cache && len_ptr) { - true_len = session_cache->getSessionBuffer(reinterpret_cast<const SSLSessionID &>(*session_id), buffer, *len_ptr); - } - return true_len; -} - -TSReturnCode -TSSslSessionInsert(const TSSslSessionID *session_id, TSSslSession add_session, TSSslConnection ssl_conn) -{ - // Don't insert if there is no session id or the cache is not yet set up - if (session_id && session_cache) { - if (dbg_ctl_ssl_session_cache_insert.on()) { - const SSLSessionID *sid = reinterpret_cast<const SSLSessionID *>(session_id); - char buf[sid->len * 2 + 1]; - sid->toString(buf, sizeof(buf)); - DbgPrint(dbg_ctl_ssl_session_cache_insert, "TSSslSessionInsert: Inserting session '%s' ", buf); - } - SSL_SESSION *session = reinterpret_cast<SSL_SESSION *>(add_session); - SSL *ssl = reinterpret_cast<SSL *>(ssl_conn); - session_cache->insertSession(reinterpret_cast<const SSLSessionID &>(*session_id), session, ssl); - // insertSession returns void, assume all went well - return TS_SUCCESS; - } else { - return TS_ERROR; - } -} - -TSReturnCode -TSSslSessionRemove(const TSSslSessionID *session_id) -{ - // Don't remove if there is no session id or the cache is not yet set up - if (session_id && session_cache) { - session_cache->removeSession(reinterpret_cast<const SSLSessionID &>(*session_id)); - // removeSession returns void, assume all went well - return TS_SUCCESS; - } else { - return TS_ERROR; - } -} - // APIs for managing and using UUIDs. TSUuid TSUuidCreate()