@@ -739,7 +739,7 @@ class fdc {
739739 //
740740 const char *tls_fp = " tls/1/(0301)(c014c00a00390038c00fc0050035c012c00800160013c00dc003000ac013c00900330032c00ec004002fc011c007c00cc002000500040015001200090014001100080006000300ff)[(0000)(000a00340032000100020003000400050006000700080009000a000b000c000d000e000f0010001100120013001400150016001700180019)(000b000403000102)(0023)]" ;
741741 const char *http_fp = " http/(434f4e4e454354)(485454502f312e31)((486f7374)(557365722d4167656e74))" ;
742- static constexpr size_t num_tests = 4 ;
742+ static constexpr size_t num_tests = 5 ;
743743 fdc fdc_object[num_tests]{
744744 {
745745 datum{tls_fp},
@@ -772,7 +772,15 @@ class fdc {
772772 " 72.163.217.105" ,
773773 80 ,
774774 truncation_status::reassembled_truncated
775- }
775+ },
776+ {
777+ datum{http_fp},
778+ " user-agent with utf8: stra\u00DF e \r\n\" " ,
779+ " abc.com" ,
780+ " 72.163.217.105" ,
781+ 80 ,
782+ truncation_status::reassembled_truncated
783+ },
776784 };
777785 for (size_t i = 0 ; i < num_tests; i++){
778786
@@ -785,16 +793,15 @@ class fdc {
785793
786794 // decode the data in the buffer to decoded_fdc
787795 //
788- static const size_t MAX_FP_STR_LEN = 8192 ;
789- char fp_str[MAX_FP_STR_LEN];
796+ char fp_str[fingerprint::MAX_FP_STR_LEN];
790797 char dst_ip_str[MAX_ADDR_STR_LEN];
791798 char sn_str[MAX_SNI_LEN];
792799 char ua_str[MAX_USER_AGENT_LEN];
793800 uint16_t dst_port;
794801 uint64_t truncation;
795802
796803 bool decoding_ok = fdc::decode (encoded_fdc,
797- writeable{(uint8_t *)fp_str, MAX_FP_STR_LEN},
804+ writeable{(uint8_t *)fp_str, fingerprint:: MAX_FP_STR_LEN},
798805 writeable{(uint8_t *)sn_str, MAX_SNI_LEN},
799806 writeable{(uint8_t *)dst_ip_str, MAX_ADDR_STR_LEN},
800807 dst_port,
@@ -840,42 +847,41 @@ class fdc {
840847
841848[[maybe_unused]] static std::string get_json_decoded_fdc (const char *fdc_blob, ssize_t blob_len) {
842849 datum fdc_data = datum{(uint8_t *)fdc_blob,(uint8_t *)(fdc_blob+blob_len)};
843- static const size_t MAX_FP_STR_LEN = 8192 ;
844- char fp_str[MAX_FP_STR_LEN];
850+ char fp_str[fingerprint::MAX_FP_STR_LEN];
845851 char dst_ip_str[MAX_ADDR_STR_LEN];
846852 char sn_str[MAX_SNI_LEN];
847853 char ua_str[MAX_USER_AGENT_LEN];
848854 uint16_t dst_port;
849855 uint64_t truncation;
850856
851- char buffer[8192 ];
857+ char buffer[10240 ];
852858 struct buffer_stream buf_json (buffer, sizeof (buffer));
853859 struct json_object record (&buf_json);
854860
855861 bool ok = fdc::decode (fdc_data,
856- writeable{(uint8_t *)fp_str, MAX_FP_STR_LEN},
862+ writeable{(uint8_t *)fp_str, fingerprint:: MAX_FP_STR_LEN},
857863 writeable{(uint8_t *)sn_str, MAX_SNI_LEN},
858864 writeable{(uint8_t *)dst_ip_str, MAX_ADDR_STR_LEN},
859865 dst_port,
860866 writeable{(uint8_t *)ua_str, MAX_USER_AGENT_LEN},
861867 truncation);
862868 if (ok) {
863869 json_object fdc_json (record," fdc" );
864- fdc_json.print_key_string (" fingerprint" ,fp_str);
865- fdc_json.print_key_string (" sni" ,sn_str);
866- fdc_json.print_key_string (" dst_ip_str" ,dst_ip_str);
867- fdc_json.print_key_int (" dst_port" ,dst_port);
868- fdc_json.print_key_string (" user_agent" ,ua_str);
869- fdc_json.print_key_string (" truncation" ,get_truncation_str (((truncation_status)truncation)));
870+ fdc_json.print_key_string (" fingerprint" , fp_str);
871+ fdc_json.print_key_json_string (" sni" , datum{ sn_str} );
872+ fdc_json.print_key_json_string (" dst_ip_str" , datum{ dst_ip_str} );
873+ fdc_json.print_key_int (" dst_port" , dst_port);
874+ fdc_json.print_key_json_string (" user_agent" , datum{ ua_str} );
875+ fdc_json.print_key_string (" truncation" , get_truncation_str (((truncation_status)truncation)));
870876 fdc_json.close ();
871877 record.close ();
872878 buf_json.write_char (' \0 ' ); // null terminate
873879 return buf_json.get_string ();
874-
880+
875881 } else {
876882 return " " ;
877883 }
878-
884+
879885}
880886
881887
0 commit comments