aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuca Deri <deri@ntop.org>2019-09-11 17:14:52 +0200
committerLuca Deri <deri@ntop.org>2019-09-11 17:14:52 +0200
commite687a73cb27042e8e9f9e5515f258026ebacc49c (patch)
tree0b98e877d2dfbcda74becf704b6e04f5510de44c /src
parent6966e0d19b389f78c97f55ab3b2318a5cda41e08 (diff)
parent7d9ed162c763dc93ec19eb29b97c87760540a86a (diff)
Merge branch 'dev' of https://github.com/ntop/nDPI into dev
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_api.h2
-rw-r--r--src/include/ndpi_typedefs.h4
-rw-r--r--src/lib/ndpi_serializer.c24
3 files changed, 25 insertions, 5 deletions
diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h
index fb209fbdb..285629035 100644
--- a/src/include/ndpi_api.h
+++ b/src/include/ndpi_api.h
@@ -819,6 +819,8 @@ extern "C" {
char* ndpi_ssl_version2str(u_int16_t version);
/* Serializer */
+ int ndpi_init_serializer_ll(ndpi_serializer *serializer, ndpi_serialization_format fmt,
+ u_int32_t buffer_size);
int ndpi_init_serializer(ndpi_serializer *serializer, ndpi_serialization_format fmt);
void ndpi_term_serializer(ndpi_serializer *serializer);
void ndpi_reset_serializer(ndpi_serializer *serializer);
diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h
index 3ee448065..b67a22a14 100644
--- a/src/include/ndpi_typedefs.h
+++ b/src/include/ndpi_typedefs.h
@@ -1357,6 +1357,9 @@ typedef enum {
ndpi_serialization_string
} ndpi_serialization_type;
+#define NDPI_SERIALIZER_DEFAULT_BUFFER_SIZE 8192
+#define NDPI_SERIALIZER_DEFAULT_BUFFER_INCR 1024
+
#define NDPI_SERIALIZER_STATUS_COMMA (1 << 0)
#define NDPI_SERIALIZER_STATUS_ARRAY (1 << 1)
#define NDPI_SERIALIZER_STATUS_EOR (1 << 2)
@@ -1368,6 +1371,7 @@ typedef struct {
typedef struct {
ndpi_private_serializer_status status;
+ u_int32_t initial_buffer_size;
u_int32_t buffer_size;
ndpi_serialization_format fmt;
u_int8_t *buffer;
diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c
index 9e17d7ec9..5572c7eab 100644
--- a/src/lib/ndpi_serializer.c
+++ b/src/lib/ndpi_serializer.c
@@ -148,13 +148,14 @@ void ndpi_reset_serializer(ndpi_serializer *_serializer) {
/* ********************************** */
-int ndpi_init_serializer(ndpi_serializer *_serializer,
- ndpi_serialization_format fmt) {
+int ndpi_init_serializer_ll(ndpi_serializer *_serializer,
+ ndpi_serialization_format fmt,
+ u_int32_t buffer_size) {
ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
memset(serializer, 0, sizeof(ndpi_private_serializer));
- serializer->buffer_size = 8192;
+ serializer->initial_buffer_size = serializer->buffer_size = buffer_size;
serializer->buffer = (u_int8_t *) malloc(serializer->buffer_size * sizeof(u_int8_t));
if(serializer->buffer == NULL)
@@ -175,6 +176,13 @@ int ndpi_init_serializer(ndpi_serializer *_serializer,
/* ********************************** */
+int ndpi_init_serializer(ndpi_serializer *_serializer,
+ ndpi_serialization_format fmt) {
+ return ndpi_init_serializer_ll(_serializer, fmt, NDPI_SERIALIZER_DEFAULT_BUFFER_SIZE);
+}
+
+/* ********************************** */
+
char* ndpi_serializer_get_buffer(ndpi_serializer *_serializer, u_int32_t *buffer_len) {
ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
char *buf = (char*)serializer->buffer;
@@ -242,8 +250,14 @@ static inline int ndpi_extend_serializer_buffer(ndpi_serializer *_serializer, u_
void *r;
ndpi_private_serializer *serializer = (ndpi_private_serializer*)_serializer;
- if(min_len < 1024)
- min_len = 1024;
+ if (min_len < NDPI_SERIALIZER_DEFAULT_BUFFER_INCR) {
+ if (serializer->initial_buffer_size < NDPI_SERIALIZER_DEFAULT_BUFFER_INCR) {
+ if (min_len < serializer->initial_buffer_size)
+ min_len = serializer->initial_buffer_size;
+ } else {
+ min_len = NDPI_SERIALIZER_DEFAULT_BUFFER_INCR;
+ }
+ }
new_size = serializer->buffer_size + min_len;