aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLuca Deri <lucaderi@users.noreply.github.com>2020-09-20 18:33:40 +0200
committerGitHub <noreply@github.com>2020-09-20 18:33:40 +0200
commit1385f05713045b846f5a830cfc23eabd5f71e70d (patch)
tree0f95d7f1cd5ea9d1053280d317a247cb4e2f083f /src
parent6a7139bb24c4835604641262a07becee637a9e53 (diff)
parentd0052fd5b2c48c8ab344d17bf4b603e80b6e1a29 (diff)
Merge pull request #1017 from lnslbrty/fix/mingw-xcompile
Added support for mingw xcompile.
Diffstat (limited to 'src')
-rw-r--r--src/include/ndpi_win32.h21
-rw-r--r--src/lib/Makefile.in6
-rw-r--r--src/lib/ndpi_classify.c1
-rw-r--r--src/lib/ndpi_main.c8
-rw-r--r--src/lib/ndpi_serializer.c25
-rw-r--r--src/lib/ndpi_utils.c5
-rw-r--r--src/lib/protocols/nats.c2
7 files changed, 53 insertions, 15 deletions
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);