@@ -57,10 +57,11 @@ pub(super) fn emit_ed2k_tcp_diag_event(record: &Ed2kTcpDumpRecord<'_>) {
5757 body. insert ( "payloadHexTruncated" . to_string ( ) , json ! ( truncated) ) ;
5858 }
5959 // `obfuscated` (C): real on-wire state derived from the transport-mode label.
60- body. insert (
61- "obfuscated" . to_string ( ) ,
62- json ! ( transport_mode_is_obfuscated( record. transport_mode) ) ,
63- ) ;
60+ // Pre-handshake meta events use `unknown`; omitting the field there avoids
61+ // reporting a false plaintext verdict before the transport exists.
62+ if let Some ( obfuscated) = transport_mode_obfuscated ( record. transport_mode ) {
63+ body. insert ( "obfuscated" . to_string ( ) , json ! ( obfuscated) ) ;
64+ }
6465 body. insert ( "transportMode" . to_string ( ) , json ! ( record. transport_mode) ) ;
6566 body. insert ( "flow" . to_string ( ) , json ! ( record. flow) ) ;
6667 body. insert ( "phase" . to_string ( ) , json ! ( record. phase) ) ;
@@ -77,7 +78,22 @@ pub(super) fn emit_ed2k_tcp_diag_event(record: &Ed2kTcpDumpRecord<'_>) {
7778 ) ;
7879}
7980
80- /// Whether an `Ed2kTransportMode` label denotes an obfuscated on-wire transport.
81- fn transport_mode_is_obfuscated ( transport_mode : & str ) -> bool {
82- transport_mode. contains ( "obfusc" ) || transport_mode. contains ( "crypt" )
81+ /// Whether an `Ed2kTransportMode` label denotes a known obfuscated on-wire transport.
82+ fn transport_mode_obfuscated ( transport_mode : & str ) -> Option < bool > {
83+ match transport_mode {
84+ "unknown" => None ,
85+ _ => Some ( transport_mode. contains ( "obfusc" ) || transport_mode. contains ( "crypt" ) ) ,
86+ }
87+ }
88+
89+ #[ cfg( test) ]
90+ mod tests {
91+ use super :: transport_mode_obfuscated;
92+
93+ #[ test]
94+ fn transport_obfuscation_is_omitted_until_mode_is_known ( ) {
95+ assert_eq ! ( transport_mode_obfuscated( "unknown" ) , None ) ;
96+ assert_eq ! ( transport_mode_obfuscated( "plaintext" ) , Some ( false ) ) ;
97+ assert_eq ! ( transport_mode_obfuscated( "obfuscated" ) , Some ( true ) ) ;
98+ }
8399}
0 commit comments