From 4c776501a652fc8b90fdf8098a20c5099b0fcfce Mon Sep 17 00:00:00 2001 From: Toni Uhlig Date: Tue, 8 Sep 2020 19:52:46 +0200 Subject: Fixed shlib xcompile for x86_64-w64-mingw32 Signed-off-by: Toni Uhlig --- src/include/ndpi_win32.h | 21 +++++++++++++++++++++ src/lib/ndpi_classify.c | 1 + src/lib/ndpi_main.c | 8 ++++---- src/lib/ndpi_serializer.c | 17 +++++++++-------- src/lib/ndpi_utils.c | 5 +++-- src/lib/protocols/nats.c | 2 +- 6 files changed, 39 insertions(+), 15 deletions(-) (limited to 'src') diff --git a/src/include/ndpi_win32.h b/src/include/ndpi_win32.h index a39a2401a..c3403c009 100644 --- a/src/include/ndpi_win32.h +++ b/src/include/ndpi_win32.h @@ -31,6 +31,8 @@ #define __mingw_forceinline __inline__ __attribute__((__always_inline__,__gnu_inline__)) #endif +#undef _WIN32_WINNT +#define _WIN32_WINNT _WIN32_WINNT_WIN8 #include #include #include @@ -39,6 +41,7 @@ #include /* getopt from: http://www.pwilson.net/sample.html. */ #include /* for getpid() and the exec..() family */ #include +#include #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS @@ -48,6 +51,17 @@ #define IPVERSION 4 /* on *nix it is defined in netinet/ip.h */ +#ifndef MIN +#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y)) +#endif + +#ifndef IPPROTO_SCTP +#define IPPROTO_SCTP 132 +#endif + +#undef gettimeofday +#define gettimeofday mingw_gettimeofday + extern char* strsep(char **sp, char *sep); typedef unsigned char u_char; @@ -79,4 +93,11 @@ extern unsigned long waitForNextEvent(unsigned long ulDelay /* ms */); #define strtok_r strtok_s #define timegm _mkgmtime +static inline struct tm * localtime_r(const time_t *timep, struct tm * result) +{ + struct tm *timeinfo; + timeinfo = localtime(timep); + return timeinfo; +} + #endif /* __NDPI_WIN32_H__ */ diff --git a/src/lib/ndpi_classify.c b/src/lib/ndpi_classify.c index 7b410e05f..a7a02cb4e 100644 --- a/src/lib/ndpi_classify.c +++ b/src/lib/ndpi_classify.c @@ -51,6 +51,7 @@ #include #include "ndpi_main.h" #include "ndpi_classify.h" +#include "ndpi_includes.h" /** finds the minimum value between to inputs */ #ifndef min diff --git a/src/lib/ndpi_main.c b/src/lib/ndpi_main.c index efd8a18a5..20700d648 100644 --- a/src/lib/ndpi_main.c +++ b/src/lib/ndpi_main.c @@ -5034,7 +5034,7 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_str, } packet->line[packet->parsed_lines].len = - (u_int16_t)(((unsigned long) &packet->payload[a]) - ((unsigned long) packet->line[packet->parsed_lines].ptr)); + (u_int16_t)(((size_t) &packet->payload[a]) - ((size_t) packet->line[packet->parsed_lines].ptr)); /* First line of a HTTP response parsing. Expected a "HTTP/1.? ???" */ if(packet->parsed_lines == 0 && packet->line[0].len >= NDPI_STATICSTRING_LEN("HTTP/1.X 200 ") && @@ -5256,8 +5256,8 @@ void ndpi_parse_packet_line_info(struct ndpi_detection_module_struct *ndpi_str, if(packet->parsed_lines >= 1) { packet->line[packet->parsed_lines].len = - (u_int16_t)(((unsigned long) &packet->payload[packet->payload_packet_len]) - - ((unsigned long) packet->line[packet->parsed_lines].ptr)); + (u_int16_t)(((size_t) &packet->payload[packet->payload_packet_len]) - + ((size_t) packet->line[packet->parsed_lines].ptr)); packet->parsed_lines++; } } @@ -5284,7 +5284,7 @@ void ndpi_parse_packet_line_info_any(struct ndpi_detection_module_struct *ndpi_s for (a = 0; a < end; a++) { if(packet->payload[a] == 0x0a) { packet->line[packet->parsed_lines].len = (u_int16_t)( - ((unsigned long) &packet->payload[a]) - ((unsigned long) packet->line[packet->parsed_lines].ptr)); + ((size_t) &packet->payload[a]) - ((size_t) packet->line[packet->parsed_lines].ptr)); if(a > 0 && packet->payload[a - 1] == 0x0d) packet->line[packet->parsed_lines].len--; diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index c1f52f89e..cf2bd8a26 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -24,6 +24,7 @@ #include #include +#include #include #include "ndpi_api.h" @@ -803,7 +804,7 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%llu", (unsigned long long)value); + "%" PRIu64, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -812,7 +813,7 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%llu", (unsigned long long)value); + "%" PRIu64, (unsigned long long)value); } else { if(value <= 0xffffffff) { return(ndpi_serialize_uint32_uint32(_serializer, key, value)); @@ -935,7 +936,7 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], - buff_diff, "%lld", (long long int)value); + buff_diff, "%" PRId64, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -944,7 +945,7 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%lld", (long long int)value); + "%" PRId64, (long long int)value); } else { if((value & 0xFFFFFFFF) == value) { @@ -1256,7 +1257,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%lld", (long long int)value); + "%" PRId64, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1264,7 +1265,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%lld", (long long int)value); + "%" PRId64, (long long int)value); } else { if ((value & 0xFFFFFFFF) == value) { return(ndpi_serialize_string_int32(_serializer, key, value)); @@ -1429,7 +1430,7 @@ static int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%llu", (unsigned long long)value); + "%" PRIu64, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1438,7 +1439,7 @@ static int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%llu", (unsigned long long)value); + "%" PRIu64, (unsigned long long)value); } else { if(value <= 0xffffffff) { return(ndpi_serialize_string_uint32(_serializer, key, value)); diff --git a/src/lib/ndpi_utils.c b/src/lib/ndpi_utils.c index 897096b70..39b85a5ef 100644 --- a/src/lib/ndpi_utils.c +++ b/src/lib/ndpi_utils.c @@ -31,6 +31,7 @@ #include "ndpi_config.h" #include "ndpi_api.h" +#include "ndpi_includes.h" #include "ahocorasick.h" #include "libcache.h" @@ -1270,12 +1271,12 @@ int ndpi_dpi2json(struct ndpi_detection_module_struct *ndpi_struct, ndpi_serialize_string_string(serializer, "server_names", flow->protos.stun_ssl.ssl.server_names); if(before) { - strftime(notBefore, sizeof(notBefore), "%F %T", before); + strftime(notBefore, sizeof(notBefore), "%Y-%m-%d %H:%M:%S", before); ndpi_serialize_string_string(serializer, "notbefore", notBefore); } if(after) { - strftime(notAfter, sizeof(notAfter), "%F %T", after); + strftime(notAfter, sizeof(notAfter), "%Y-%m-%d %H:%M:%S", after); ndpi_serialize_string_string(serializer, "notafter", notAfter); } ndpi_serialize_string_string(serializer, "ja3", flow->protos.stun_ssl.ssl.ja3_client); diff --git a/src/lib/protocols/nats.c b/src/lib/protocols/nats.c index da99a36de..0254a02c4 100644 --- a/src/lib/protocols/nats.c +++ b/src/lib/protocols/nats.c @@ -56,7 +56,7 @@ void ndpi_search_nats_tcp(struct ndpi_detection_module_struct *ndpi_struct, if(!match) continue; if(ndpi_strnstr((const char *)match, "\r\n", - flow->packet.payload_packet_len - ((unsigned long)match - (unsigned long)flow->packet.payload)) != NULL) { + flow->packet.payload_packet_len - ((size_t)match - (size_t)flow->packet.payload)) != NULL) { NDPI_LOG_INFO(ndpi_struct, "found NATS\n"); ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_NATS, NDPI_PROTOCOL_UNKNOWN); -- cgit v1.2.3 From bcce12266571d419c5d6342539e27e29ec54132d Mon Sep 17 00:00:00 2001 From: Toni Uhlig Date: Fri, 18 Sep 2020 19:08:56 +0200 Subject: Fixed mingw build w/o examples/tests/fuzzer. Signed-off-by: Toni Uhlig --- configure.seed | 2 ++ example/Makefile.in | 9 +++++++++ src/lib/Makefile.in | 6 ++++++ 3 files changed, 17 insertions(+) (limited to 'src') diff --git a/configure.seed b/configure.seed index bf1260fd3..fa24b1917 100644 --- a/configure.seed +++ b/configure.seed @@ -107,6 +107,7 @@ case "$host" in *-*-mingw32*|*-*-msys) CFLAGS="${CFLAGS} -DOS_WIN32" LDFLAGS="${LDFLAGS} -lws2_32 -lucrtbase" + BUILD_MINGW=1 ;; *) if test -f $PCAP_HOME/libpcap/libpcap.a; then : @@ -205,4 +206,5 @@ AC_SUBST(HAVE_PTHREAD_SETAFFINITY_NP) AC_SUBST(CUSTOM_NDPI) AC_SUBST(NDPI_API_VERSION) AC_SUBST(EXTRA_TARGETS) +AC_SUBST(BUILD_MINGW) AC_OUTPUT diff --git a/example/Makefile.in b/example/Makefile.in index 32e36677d..e0dc34b95 100644 --- a/example/Makefile.in +++ b/example/Makefile.in @@ -1,5 +1,6 @@ CC=@CC@ CXX=@CXX@ +BUILD_MINGW=@BUILD_MINGW@ SRCHOME=../src CFLAGS=-g -fPIC -DPIC -I$(SRCHOME)/include @CFLAGS@ LIBNDPI=$(SRCHOME)/lib/libndpi.a @@ -9,6 +10,12 @@ HEADERS=intrusion_detection.h reader_util.h $(SRCHOME)/include/ndpi_api.h \ OBJS=ndpiReader.o reader_util.o intrusion_detection.o PREFIX?=@prefix@ +ifneq ($(BUILD_MINGW),) +all: + @echo 'Examples disabled due to mingw build.' + +else + all: ndpiReader @DPDK_TARGET@ EXECUTABLE_SOURCES := ndpiReader.c ndpiSimpleIntegration.c @@ -50,3 +57,5 @@ clean: distclean: clean /bin/rm -f Makefile.dpdk /bin/rm -f Makefile + +endif diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in index 09e1a7d09..902941d26 100644 --- a/src/lib/Makefile.in +++ b/src/lib/Makefile.in @@ -29,13 +29,19 @@ NDPI_LIBS = $(NDPI_LIB_STATIC) $(NDPI_LIB_SHARED) ifneq ($(OS),Windows_NT) OS := $(shell uname) endif +BUILD_MINGW = @BUILD_MINGW@ ifeq ($(OS),Darwin) CC=clang SONAME_FLAG= else +ifneq ($(BUILD_MINGW),) +NDPI_LIB_SHARED_BASE = libndpi +NDPI_LIB_SHARED = $(NDPI_LIB_SHARED_BASE)-@NDPI_VERSION_SHORT@.dll +else SONAME_FLAG=-Wl,-soname,$(NDPI_LIB_SHARED_BASE).$(NDPI_VERSION_MAJOR) endif +endif all: $(NDPI_LIBS) -- cgit v1.2.3 From d0052fd5b2c48c8ab344d17bf4b603e80b6e1a29 Mon Sep 17 00:00:00 2001 From: Toni Uhlig Date: Fri, 18 Sep 2020 19:29:12 +0200 Subject: Using NDPI_I64_FORMAT, NDPI_U64_FORMAT format string to differentiate between Windows and non-Windows. Signed-off-by: Toni Uhlig --- src/lib/ndpi_serializer.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/lib/ndpi_serializer.c b/src/lib/ndpi_serializer.c index cf2bd8a26..b244360b4 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -39,6 +39,14 @@ #include #endif +#ifdef WIN32 +#define NDPI_I64_FORMAT "%" PRId64 +#define NDPI_U64_FORMAT "%" PRIu64 +#else +#define NDPI_I64_FORMAT "%lld" +#define NDPI_U64_FORMAT "%llu" +#endif + /* ********************************** */ u_int64_t ndpi_htonll(u_int64_t v) { @@ -804,7 +812,7 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRIu64, (unsigned long long)value); + NDPI_U64_FORMAT, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -813,7 +821,7 @@ int ndpi_serialize_uint32_uint64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRIu64, (unsigned long long)value); + NDPI_U64_FORMAT, (unsigned long long)value); } else { if(value <= 0xffffffff) { return(ndpi_serialize_uint32_uint32(_serializer, key, value)); @@ -936,7 +944,7 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], - buff_diff, "%" PRId64, (long long int)value); + buff_diff, NDPI_I64_FORMAT, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -945,7 +953,7 @@ int ndpi_serialize_uint32_int64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRId64, (long long int)value); + NDPI_I64_FORMAT, (long long int)value); } else { if((value & 0xFFFFFFFF) == value) { @@ -1257,7 +1265,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRId64, (long long int)value); + NDPI_I64_FORMAT, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1265,7 +1273,7 @@ int ndpi_serialize_binary_int64(ndpi_serializer *_serializer, ndpi_serialize_csv_pre(serializer); buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRId64, (long long int)value); + NDPI_I64_FORMAT, (long long int)value); } else { if ((value & 0xFFFFFFFF) == value) { return(ndpi_serialize_string_int32(_serializer, key, value)); @@ -1430,7 +1438,7 @@ static int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRIu64, (unsigned long long)value); + NDPI_U64_FORMAT, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1439,7 +1447,7 @@ static int ndpi_serialize_binary_uint64(ndpi_serializer *_serializer, buff_diff = serializer->buffer.size - serializer->status.buffer.size_used; serializer->status.buffer.size_used += snprintf((char *) &serializer->buffer.data[serializer->status.buffer.size_used], buff_diff, - "%" PRIu64, (unsigned long long)value); + NDPI_U64_FORMAT, (unsigned long long)value); } else { if(value <= 0xffffffff) { return(ndpi_serialize_string_uint32(_serializer, key, value)); -- cgit v1.2.3