diff options
author | Luca Deri <lucaderi@users.noreply.github.com> | 2020-09-20 18:33:40 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-20 18:33:40 +0200 |
commit | 1385f05713045b846f5a830cfc23eabd5f71e70d (patch) | |
tree | 0f95d7f1cd5ea9d1053280d317a247cb4e2f083f | |
parent | 6a7139bb24c4835604641262a07becee637a9e53 (diff) | |
parent | d0052fd5b2c48c8ab344d17bf4b603e80b6e1a29 (diff) |
Merge pull request #1017 from lnslbrty/fix/mingw-xcompile
Added support for mingw xcompile.
-rw-r--r-- | configure.seed | 2 | ||||
-rw-r--r-- | example/Makefile.in | 9 | ||||
-rw-r--r-- | src/include/ndpi_win32.h | 21 | ||||
-rw-r--r-- | src/lib/Makefile.in | 6 | ||||
-rw-r--r-- | src/lib/ndpi_classify.c | 1 | ||||
-rw-r--r-- | src/lib/ndpi_main.c | 8 | ||||
-rw-r--r-- | src/lib/ndpi_serializer.c | 25 | ||||
-rw-r--r-- | src/lib/ndpi_utils.c | 5 | ||||
-rw-r--r-- | src/lib/protocols/nats.c | 2 |
9 files changed, 64 insertions, 15 deletions
diff --git a/configure.seed b/configure.seed index b6fb04c29..37a269943 100644 --- a/configure.seed +++ b/configure.seed @@ -108,6 +108,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 : @@ -206,4 +207,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/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 <winsock2.h> #include <windows.h> #include <ws2tcpip.h> @@ -39,6 +41,7 @@ #include <getopt.h> /* getopt from: http://www.pwilson.net/sample.html. */ #include <process.h> /* for getpid() and the exec..() family */ #include <stdint.h> +#include <time.h> #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/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) 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 <math.h> #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 ba497652e..06eff97a5 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 a5f14fbe4..84e0697ce 100644 --- a/src/lib/ndpi_serializer.c +++ b/src/lib/ndpi_serializer.c @@ -24,6 +24,7 @@ #include <stdlib.h> #include <errno.h> +#include <inttypes.h> #include <sys/types.h> #include "ndpi_api.h" @@ -38,6 +39,14 @@ #include <sys/endian.h> #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) { @@ -829,7 +838,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); + NDPI_U64_FORMAT, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -838,7 +847,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); + NDPI_U64_FORMAT, (unsigned long long)value); } else { if(value <= 0xffffffff) { return(ndpi_serialize_uint32_uint32(_serializer, key, value)); @@ -961,7 +970,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, NDPI_I64_FORMAT, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -970,7 +979,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); + NDPI_I64_FORMAT, (long long int)value); } else { if((value & 0xFFFFFFFF) == value) { @@ -1282,7 +1291,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); + NDPI_I64_FORMAT, (long long int)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1290,7 +1299,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); + NDPI_I64_FORMAT, (long long int)value); } else { if ((value & 0xFFFFFFFF) == value) { return(ndpi_serialize_string_int32(_serializer, key, value)); @@ -1455,7 +1464,7 @@ 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); + NDPI_U64_FORMAT, (unsigned long long)value); ndpi_serialize_json_post(_serializer); } else if(serializer->fmt == ndpi_serialization_format_csv) { @@ -1464,7 +1473,7 @@ 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); + NDPI_U64_FORMAT, (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 1a8459c34..4ec8e28ff 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); |