mirror of
https://github.com/optim-enterprises-bv/nDPId.git
synced 2025-10-30 01:42:22 +00:00
@@ -523,13 +523,47 @@ static int parse_options(int argc, char ** argv)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int mainloop(void)
|
||||||
|
{
|
||||||
|
enum nDPIsrvd_read_return read_ret = READ_OK;
|
||||||
|
|
||||||
|
while (main_thread_shutdown == 0)
|
||||||
|
{
|
||||||
|
read_ret = nDPIsrvd_read(sock);
|
||||||
|
if (errno == EINTR)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (read_ret == READ_TIMEOUT)
|
||||||
|
{
|
||||||
|
printf("No data received during the last %llu second(s).\n",
|
||||||
|
(long long unsigned int)sock->read_timeout.tv_sec);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (read_ret != READ_OK)
|
||||||
|
{
|
||||||
|
printf("Could not read from socket: %s\n", nDPIsrvd_enum_to_string(read_ret));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock);
|
||||||
|
if (parse_ret != PARSE_NEED_MORE_DATA)
|
||||||
|
{
|
||||||
|
printf("Could not parse json string: %s\n", nDPIsrvd_enum_to_string(parse_ret));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (main_thread_shutdown == 0 && read_ret != READ_OK)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main(int argc, char ** argv)
|
int main(int argc, char ** argv)
|
||||||
{
|
{
|
||||||
signal(SIGUSR1, sighandler);
|
|
||||||
signal(SIGINT, sighandler);
|
|
||||||
signal(SIGTERM, sighandler);
|
|
||||||
signal(SIGPIPE, sighandler);
|
|
||||||
|
|
||||||
sock = nDPIsrvd_socket_init(0, 0, 0, 0, simple_json_callback, NULL, NULL);
|
sock = nDPIsrvd_socket_init(0, 0, 0, 0, simple_json_callback, NULL, NULL);
|
||||||
if (sock == NULL)
|
if (sock == NULL)
|
||||||
{
|
{
|
||||||
@@ -581,41 +615,11 @@ int main(int argc, char ** argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nDPIsrvd_read_return read_ret = READ_OK;
|
int retval = mainloop();
|
||||||
while (main_thread_shutdown == 0)
|
|
||||||
{
|
|
||||||
read_ret = nDPIsrvd_read(sock);
|
|
||||||
if (errno == EINTR)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (read_ret == READ_TIMEOUT)
|
|
||||||
{
|
|
||||||
printf("No data received during the last %llu second(s).\n",
|
|
||||||
(long long unsigned int)sock->read_timeout.tv_sec);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (read_ret != READ_OK)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock);
|
|
||||||
if (parse_ret != PARSE_NEED_MORE_DATA)
|
|
||||||
{
|
|
||||||
printf("Could not parse json string: %s\n", nDPIsrvd_enum_to_string(parse_ret));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (main_thread_shutdown == 0 && read_ret != READ_OK)
|
|
||||||
{
|
|
||||||
printf("Parse read %s\n", nDPIsrvd_enum_to_string(read_ret));
|
|
||||||
}
|
|
||||||
|
|
||||||
nDPIsrvd_socket_free(&sock);
|
nDPIsrvd_socket_free(&sock);
|
||||||
daemonize_shutdown(pidfile);
|
daemonize_shutdown(pidfile);
|
||||||
closelog();
|
closelog();
|
||||||
|
|
||||||
return read_ret;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -371,6 +371,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock
|
|||||||
struct nDPIsrvd_json_token const * const pkt = TOKEN_GET_SZ(sock, "pkt");
|
struct nDPIsrvd_json_token const * const pkt = TOKEN_GET_SZ(sock, "pkt");
|
||||||
if (pkt == NULL)
|
if (pkt == NULL)
|
||||||
{
|
{
|
||||||
|
syslog(LOG_DAEMON | LOG_ERR, "%s", "No packet data available.");
|
||||||
return CALLBACK_ERROR;
|
return CALLBACK_ERROR;
|
||||||
}
|
}
|
||||||
if (flow_user->packets == NULL)
|
if (flow_user->packets == NULL)
|
||||||
@@ -379,6 +380,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock
|
|||||||
}
|
}
|
||||||
if (flow_user->packets == NULL)
|
if (flow_user->packets == NULL)
|
||||||
{
|
{
|
||||||
|
syslog(LOG_DAEMON | LOG_ERR, "%s", "Memory allocation for captured packets failed.");
|
||||||
return CALLBACK_ERROR;
|
return CALLBACK_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -499,6 +501,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock
|
|||||||
#endif
|
#endif
|
||||||
if (packet_write_pcap_file(flow_user->packets, flow_user->flow_datalink, pcap_filename) != 0)
|
if (packet_write_pcap_file(flow_user->packets, flow_user->flow_datalink, pcap_filename) != 0)
|
||||||
{
|
{
|
||||||
|
syslog(LOG_DAEMON | LOG_ERR, "Could not packet data to pcap file %s", pcap_filename);
|
||||||
return CALLBACK_ERROR;
|
return CALLBACK_ERROR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -773,29 +776,39 @@ static int parse_options(int argc, char ** argv)
|
|||||||
|
|
||||||
static int mainloop(void)
|
static int mainloop(void)
|
||||||
{
|
{
|
||||||
sigset_t sigusr1_block;
|
enum nDPIsrvd_read_return read_ret = READ_OK;
|
||||||
|
|
||||||
sigemptyset(&sigusr1_block);
|
|
||||||
sigaddset(&sigusr1_block, SIGUSR1);
|
|
||||||
|
|
||||||
while (main_thread_shutdown == 0)
|
while (main_thread_shutdown == 0)
|
||||||
{
|
{
|
||||||
sigprocmask(SIG_BLOCK, &sigusr1_block, NULL);
|
read_ret = nDPIsrvd_read(sock);
|
||||||
errno = 0;
|
if (errno == EINTR)
|
||||||
enum nDPIsrvd_read_return read_ret = nDPIsrvd_read(sock);
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (read_ret == READ_TIMEOUT)
|
||||||
|
{
|
||||||
|
syslog(LOG_DAEMON,
|
||||||
|
"No data received during the last %llu second(s).\n",
|
||||||
|
(long long unsigned int)sock->read_timeout.tv_sec);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
if (read_ret != READ_OK)
|
if (read_ret != READ_OK)
|
||||||
{
|
{
|
||||||
syslog(LOG_DAEMON | LOG_ERR, "nDPIsrvd read failed with: %s", nDPIsrvd_enum_to_string(read_ret));
|
syslog(LOG_DAEMON | LOG_ERR, "Could not read from socket: %s", nDPIsrvd_enum_to_string(read_ret));
|
||||||
return 1;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock);
|
enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock);
|
||||||
if (parse_ret != PARSE_NEED_MORE_DATA)
|
if (parse_ret != PARSE_NEED_MORE_DATA)
|
||||||
{
|
{
|
||||||
syslog(LOG_DAEMON | LOG_ERR, "nDPIsrvd parse failed with: %s", nDPIsrvd_enum_to_string(parse_ret));
|
syslog(LOG_DAEMON | LOG_ERR, "Could not parse json string: %s", nDPIsrvd_enum_to_string(parse_ret));
|
||||||
return 1;
|
break;
|
||||||
}
|
}
|
||||||
sigprocmask(SIG_UNBLOCK, &sigusr1_block, NULL);
|
}
|
||||||
|
|
||||||
|
if (main_thread_shutdown == 0 && read_ret != READ_OK)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -819,8 +832,7 @@ int main(int argc, char ** argv)
|
|||||||
printf("Recv buffer size: %u\n", NETWORK_BUFFER_MAX_SIZE);
|
printf("Recv buffer size: %u\n", NETWORK_BUFFER_MAX_SIZE);
|
||||||
printf("Connecting to `%s'..\n", serv_optarg);
|
printf("Connecting to `%s'..\n", serv_optarg);
|
||||||
|
|
||||||
enum nDPIsrvd_connect_return connect_ret = nDPIsrvd_connect(sock);
|
if (nDPIsrvd_connect(sock) != CONNECT_OK)
|
||||||
if (connect_ret != CONNECT_OK)
|
|
||||||
{
|
{
|
||||||
fprintf(stderr, "%s: nDPIsrvd socket connect to %s failed!\n", argv[0], serv_optarg);
|
fprintf(stderr, "%s: nDPIsrvd socket connect to %s failed!\n", argv[0], serv_optarg);
|
||||||
nDPIsrvd_socket_free(&sock);
|
nDPIsrvd_socket_free(&sock);
|
||||||
|
|||||||
Reference in New Issue
Block a user