feat: Add ECHAccepted field to MITMProbeReport and log results in probe handling

Kim committed May 7, 2026 at 12:09 UTC 49a64f1678d337289f015ab5a82cc1fb01a283c6
1 file changed +11 -5
sdk/mitm.go
+11 -5
@@ -33,11 +33,12 @@ const (
33 )
34
35 type MITMProbeReport struct {
36 - RelayURL string
37 - PublicURL string
38 - Address string
39 - Detected bool
40 - Reason string
36 + RelayURL string
37 + PublicURL string
38 + Address string
39 + ECHAccepted bool
40 + Detected bool
41 + Reason string
42 }
43
44 type mitmProbePending struct {
@@ -135,6 +136,7 @@ func (m *mitmManager) probeTLSPassthrough(ctx context.Context) (MITMProbeReport,
136 }
137
138 clientState := tlsConn.ConnectionState()
139 + report.ECHAccepted = clientState.ECHAccepted
140 expected, err := (&clientState).ExportKeyingMaterial(mitmProbeExporterLabel, nil, 32)
141 if err != nil {
142 return report, fmt.Errorf("export client probe keying material: %w", err)
@@ -243,11 +245,13 @@ func (m *mitmManager) logResult(report MITMProbeReport, err error) {
245 }
246 log.Warn().
247 Err(err).
248 + Bool("ech_accepted", report.ECHAccepted).
249 Str("relay_url", relayURL).
250 Str("address", l.identity.Address).
251 Msg("tls passthrough self-probe failed")
252 case report.Reason == types.MITMProbeReasonProbeTimeout:
253 log.Warn().
254 + Bool("ech_accepted", report.ECHAccepted).
255 Str("relay_url", report.RelayURL).
256 Str("public_url", report.PublicURL).
257 Str("address", report.Address).
@@ -255,6 +259,7 @@ func (m *mitmManager) logResult(report MITMProbeReport, err error) {
259 case report.Detected:
260 event := log.Warn().
261 Bool("ban_mitm", m.ban).
262 + Bool("ech_accepted", report.ECHAccepted).
263 Str("reason", report.Reason).
264 Str("relay_url", report.RelayURL).
265 Str("public_url", report.PublicURL).
@@ -271,6 +276,7 @@ func (m *mitmManager) logResult(report MITMProbeReport, err error) {
276 event.Msg("tls termination suspected by self-probe")
277 default:
278 log.Debug().
279 + Bool("ech_accepted", report.ECHAccepted).
280 Str("relay_url", report.RelayURL).
281 Str("public_url", report.PublicURL).
282 Str("address", report.Address).