32
32
#include " records/RecHttp.h"
33
33
#include " iocore/net/TLSBasicSupport.h"
34
34
#include " iocore/net/TLSSessionResumptionSupport.h"
35
+ #include " tscore/ink_assert.h"
35
36
36
37
#include < string>
37
38
@@ -45,6 +46,7 @@ struct ClientConnectionInfo {
45
46
bool tcp_reused{false };
46
47
bool ssl_reused{false };
47
48
bool connection_is_ssl{false };
49
+ int ssl_resumption_type{0 }; // 0=no resumption, 1=session cache, 2=session ticket
48
50
49
51
char const *protocol{" -" };
50
52
char const *sec_protocol{" -" };
@@ -79,6 +81,8 @@ class HttpUserAgent
79
81
80
82
bool get_client_ssl_reused () const ;
81
83
84
+ int get_client_ssl_resumption_type () const ;
85
+
82
86
bool get_client_connection_is_ssl () const ;
83
87
84
88
char const *get_client_protocol () const ;
@@ -190,6 +194,20 @@ HttpUserAgent::set_txn(ProxyTransaction *txn, TransactionMilestones &milestones)
190
194
191
195
if (auto tsrs = netvc->get_service <TLSSessionResumptionSupport>()) {
192
196
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
+ }
193
211
}
194
212
195
213
if (auto protocol_str{txn->get_protocol_string ()}; protocol_str) {
@@ -235,6 +253,12 @@ HttpUserAgent::get_client_ssl_reused() const
235
253
return m_conn_info.ssl_reused ;
236
254
}
237
255
256
+ inline int
257
+ HttpUserAgent::get_client_ssl_resumption_type () const
258
+ {
259
+ return m_conn_info.ssl_resumption_type ;
260
+ }
261
+
238
262
inline bool
239
263
HttpUserAgent::get_client_connection_is_ssl () const
240
264
{
0 commit comments