diff --git a/example/reader_util.c b/example/reader_util.c index 3c49563edb6..1ede37ca2f1 100644 --- a/example/reader_util.c +++ b/example/reader_util.c @@ -483,6 +483,8 @@ struct ndpi_workflow* ndpi_workflow_init(const struct ndpi_workflow_prefs * pref workflow->prefs = *prefs; workflow->ndpi_struct = module; + ndpi_set_user_data(module, workflow); + ndpi_set_log_level(module, nDPI_LogLevel); if(_debug_protocols != NULL && ! _debug_protocols_ok) { diff --git a/src/include/ndpi_api.h b/src/include/ndpi_api.h index 0a420accb4d..eac4bcd2544 100644 --- a/src/include/ndpi_api.h +++ b/src/include/ndpi_api.h @@ -1942,6 +1942,25 @@ extern "C" { char *out, u_int out_len, u_int8_t use_json); + /* ******************************* */ + + /** + * Set user data which can later retrieved with `ndpi_get_user_data()`. + * + * @par ndpi_str = the struct created for the protocol detection + * @par user_data = user data pointer you want to retrieve later with `ndpi_get_user_data()` + * + */ + void ndpi_set_user_data(struct ndpi_detection_module_struct *ndpi_str, void *user_data); + + /** + * Get user data which was previously set with `ndpi_set_user_data()`. + * + * @return the user data pointer + * + */ + void *ndpi_get_user_data(struct ndpi_detection_module_struct *ndpi_str); + #ifdef __cplusplus } #endif diff --git a/src/include/ndpi_typedefs.h b/src/include/ndpi_typedefs.h index d857899da33..1cc55047c33 100644 --- a/src/include/ndpi_typedefs.h +++ b/src/include/ndpi_typedefs.h @@ -221,8 +221,10 @@ typedef struct ndpi_protocol_bitmask_struct { ndpi_ndpi_mask fds_bits[NDPI_NUM_FDS_BITS]; } ndpi_protocol_bitmask_struct_t; +struct ndpi_detection_module_struct; + /* NDPI_DEBUG_FUNCTION_PTR (cast) */ -typedef void (*ndpi_debug_function_ptr) (u_int32_t protocol, void *module_struct, +typedef void (*ndpi_debug_function_ptr) (u_int32_t protocol, struct ndpi_detection_module_struct *module_struct, ndpi_log_level_t log_level, const char *file, const char *func, unsigned line, const char *format, ...); @@ -1158,9 +1160,7 @@ struct ndpi_detection_module_struct { u_int8_t skip_tls_blocks_until_change_cipher:1, enable_ja3_plus:1, _notused:6; u_int8_t tls_certificate_expire_in_x_days; -#ifdef NDPI_ENABLE_DEBUG_MESSAGES void *user_data; -#endif char custom_category_labels[NUM_CUSTOM_CATEGORIES][CUSTOM_CATEGORY_LABEL_LEN]; /* callback function buffer */ diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index 7a5de852f2f..b37ae40ab6a 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -2863,9 +2863,7 @@ struct ndpi_detection_module_struct *ndpi_init_detection_module(ndpi_init_prefs ndpi_str->max_packets_to_process = NDPI_DEFAULT_MAX_NUM_PKTS_PER_FLOW_TO_DISSECT; NDPI_BITMASK_SET_ALL(ndpi_str->detection_bitmask); -#ifdef NDPI_ENABLE_DEBUG_MESSAGES ndpi_str->user_data = NULL; -#endif ndpi_str->tcp_max_retransmission_window_size = NDPI_DEFAULT_MAX_TCP_RETRANSMISSION_WINDOW_SIZE; ndpi_str->tls_certificate_expire_in_x_days = 30; /* NDPI_TLS_CERTIFICATE_ABOUT_TO_EXPIRE flow risk */ @@ -9801,3 +9799,20 @@ u_int32_t ndpi_get_protocol_aggressiveness(struct ndpi_detection_module_struct * return -1; } } + +/* ******************************************************************** */ + +void ndpi_set_user_data(struct ndpi_detection_module_struct *ndpi_str, void *user_data) +{ + if (ndpi_str->user_data != NULL) + { + NDPI_LOG_ERR(ndpi_str, "%s", "User data is already set. Overwriting.") + } + + ndpi_str->user_data = user_data; +} + +void *ndpi_get_user_data(struct ndpi_detection_module_struct *ndpi_str) +{ + return ndpi_str->user_data; +}