3232#include " records/RecHttp.h"
3333#include " iocore/net/TLSBasicSupport.h"
3434#include " iocore/net/TLSSessionResumptionSupport.h"
35+ #include " tscore/ink_assert.h"
3536
3637#include < string>
3738
@@ -45,6 +46,7 @@ struct ClientConnectionInfo {
4546 bool tcp_reused{false };
4647 bool ssl_reused{false };
4748 bool connection_is_ssl{false };
49+ int ssl_resumption_type{0 }; // 0=no resumption, 1=session cache, 2=session ticket
4850
4951 char const *protocol{" -" };
5052 char const *sec_protocol{" -" };
@@ -79,6 +81,8 @@ class HttpUserAgent
7981
8082 bool get_client_ssl_reused () const ;
8183
84+ int get_client_ssl_resumption_type () const ;
85+
8286 bool get_client_connection_is_ssl () const ;
8387
8488 char const *get_client_protocol () const ;
@@ -190,6 +194,20 @@ HttpUserAgent::set_txn(ProxyTransaction *txn, TransactionMilestones &milestones)
190194
191195 if (auto tsrs = netvc->get_service <TLSSessionResumptionSupport>()) {
192196 m_conn_info.ssl_reused = tsrs->getIsResumedSSLSession ();
197+
198+ if (m_conn_info.ssl_reused ) {
199+ if (tsrs->getIsResumedFromSessionCache ()) {
200+ m_conn_info.ssl_resumption_type = 1 ;
201+ } else if (tsrs->getIsResumedFromSessionTicket ()) {
202+ m_conn_info.ssl_resumption_type = 2 ;
203+ } else {
204+ // This should not happen if ssl_reused is true.
205+ ink_assert (!" ssl_resumption_type should be set for an SSL reused session" );
206+ m_conn_info.ssl_resumption_type = 0 ;
207+ }
208+ } else {
209+ m_conn_info.ssl_resumption_type = 0 ;
210+ }
193211 }
194212
195213 if (auto protocol_str{txn->get_protocol_string ()}; protocol_str) {
@@ -235,6 +253,12 @@ HttpUserAgent::get_client_ssl_reused() const
235253 return m_conn_info.ssl_reused ;
236254}
237255
256+ inline int
257+ HttpUserAgent::get_client_ssl_resumption_type () const
258+ {
259+ return m_conn_info.ssl_resumption_type ;
260+ }
261+
238262inline bool
239263HttpUserAgent::get_client_connection_is_ssl () const
240264{
0 commit comments