Serializer supports double for JSON and CSV only for the time being (TLV needs to be extended)

This commit is contained in:
Alfredo Cardigliano 2022-09-01 14:43:52 +02:00
parent 2372063d25
commit bd29fa46ba
3 changed files with 12 additions and 5 deletions

View file

@ -1629,7 +1629,7 @@ typedef enum {
ndpi_serialization_end_of_list = 15,
/* Do not add new types!
* Exceeding 16 types requires reworking the TLV encoding due to key type limit (4 bit) */
ndpi_serialization_double = 16 /* FIXX this is currently unusable */
ndpi_serialization_double = 16 /* FIXX this is currently unusable */
} ndpi_serialization_type;
#define NDPI_SERIALIZER_DEFAULT_HEADER_SIZE 1024

View file

@ -1650,6 +1650,7 @@ int ndpi_serialize_binary_float(ndpi_serializer *_serializer,
/* ********************************** */
/* JSON/CSV only (TLV not yet supported due to a type field limit) */
int ndpi_serialize_binary_double(ndpi_serializer *_serializer,
const char *key,
u_int16_t klen,
@ -1694,10 +1695,14 @@ int ndpi_serialize_binary_double(ndpi_serializer *_serializer,
buff_diff = serializer->buffer.size - serializer->status.buffer.size_used;
serializer->status.buffer.size_used += ndpi_snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, format, value);
} else {
#if 1
fprintf(stderr, "TLV serializer does not support double\n");
#else
serializer->buffer.data[serializer->status.buffer.size_used++] = (ndpi_serialization_string << 4) | ndpi_serialization_double;
ndpi_serialize_single_string(serializer, key, klen);
ndpi_serialize_single_double(serializer, value);
#endif
}
serializer->status.flags |= NDPI_SERIALIZER_STATUS_NOT_EMPTY;

View file

@ -100,7 +100,8 @@ int serializerUnitTest() {
assert(ndpi_serialize_string_string(&serializer, kbuf, vbuf) != -1);
assert(ndpi_serialize_string_uint32(&serializer, kbuf, i*i) != -1);
assert(ndpi_serialize_string_float(&serializer, kbuf, (float)(i*i), "%f") != -1);
assert(ndpi_serialize_string_double(&serializer, kbuf, ((double)(FLT_MAX))*2, "%lf") != -1);
if (fmt != ndpi_serialization_format_tlv)
assert(ndpi_serialize_string_double(&serializer, kbuf, ((double)(FLT_MAX))*2, "%lf") != -1);
assert(ndpi_serialize_string_int64(&serializer, kbuf, INT64_MAX) != -1);
if ((i&0x3) == 0x3) ndpi_serialize_end_of_record(&serializer);
}
@ -185,7 +186,7 @@ int serializerUnitTest() {
}
break;
default:
printf("%s: ERROR (unsupported TLV key type %u)\n", __FUNCTION__, kt);
printf("%s: ERROR Unsupported TLV key type %u (value type %u)\n", __FUNCTION__, kt, et);
return -1;
}
@ -222,7 +223,7 @@ int serializerUnitTest() {
default:
if (verbose) printf("\n");
printf("%s: ERROR (unsupported type %u detected)\n", __FUNCTION__, et);
printf("%s: ERROR Unsupported TLV value type %u (key type %u)\n", __FUNCTION__, et, kt);
return -1;
}
}
@ -277,7 +278,8 @@ int serializeProtoUnitTest(void)
NDPI_SET_BIT(risks, NDPI_TLS_SELFSIGNED_CERTIFICATE);
ndpi_serialize_proto(ndpi_info_mod, &serializer, risks, NDPI_CONFIDENCE_DPI, ndpi_proto);
assert(ndpi_serialize_string_float(&serializer, "float", FLT_MAX, "%f") != -1);
assert(ndpi_serialize_string_double(&serializer, "double", ((double)(FLT_MAX))*2, "%lf") != -1);
if (fmt != ndpi_serialization_format_tlv)
assert(ndpi_serialize_string_double(&serializer, "double", ((double)(FLT_MAX))*2, "%lf") != -1);
if (fmt == ndpi_serialization_format_json)
{