summaryrefslogtreecommitdiff
path: root/examples/c-captured
diff options
context:
space:
mode:
authorToni Uhlig <matzeton@googlemail.com>2022-11-02 00:01:57 +0100
committerToni Uhlig <matzeton@googlemail.com>2022-11-02 00:01:57 +0100
commit25f4ef74acb73340bd7cba7a7d45ab7191232283 (patch)
tree0facc8be5feb4d75aaf261cb003e0ddf6a938552 /examples/c-captured
parentd55e39792970234b0b07582378cc3ec07ab62bf3 (diff)
Improved examples.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'examples/c-captured')
-rw-r--r--examples/c-captured/c-captured.c40
1 files changed, 26 insertions, 14 deletions
diff --git a/examples/c-captured/c-captured.c b/examples/c-captured/c-captured.c
index 229a678eb..5168c8191 100644
--- a/examples/c-captured/c-captured.c
+++ b/examples/c-captured/c-captured.c
@@ -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");
if (pkt == NULL)
{
+ syslog(LOG_DAEMON | LOG_ERR, "%s", "No packet data available.");
return CALLBACK_ERROR;
}
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)
{
+ syslog(LOG_DAEMON | LOG_ERR, "%s", "Memory allocation for captured packets failed.");
return CALLBACK_ERROR;
}
@@ -499,6 +501,7 @@ static enum nDPIsrvd_callback_return captured_json_callback(struct nDPIsrvd_sock
#endif
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;
}
}
@@ -773,29 +776,39 @@ static int parse_options(int argc, char ** argv)
static int mainloop(void)
{
- sigset_t sigusr1_block;
-
- sigemptyset(&sigusr1_block);
- sigaddset(&sigusr1_block, SIGUSR1);
+ enum nDPIsrvd_read_return read_ret = READ_OK;
while (main_thread_shutdown == 0)
{
- sigprocmask(SIG_BLOCK, &sigusr1_block, NULL);
- errno = 0;
- enum nDPIsrvd_read_return read_ret = nDPIsrvd_read(sock);
+ read_ret = nDPIsrvd_read(sock);
+ if (errno == EINTR)
+ {
+ 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)
{
- syslog(LOG_DAEMON | LOG_ERR, "nDPIsrvd read failed with: %s", nDPIsrvd_enum_to_string(read_ret));
- return 1;
+ syslog(LOG_DAEMON | LOG_ERR, "Could not read from socket: %s", nDPIsrvd_enum_to_string(read_ret));
+ break;
}
enum nDPIsrvd_parse_return parse_ret = nDPIsrvd_parse_all(sock);
if (parse_ret != PARSE_NEED_MORE_DATA)
{
- syslog(LOG_DAEMON | LOG_ERR, "nDPIsrvd parse failed with: %s", nDPIsrvd_enum_to_string(parse_ret));
- return 1;
+ syslog(LOG_DAEMON | LOG_ERR, "Could not parse json string: %s", nDPIsrvd_enum_to_string(parse_ret));
+ break;
}
- sigprocmask(SIG_UNBLOCK, &sigusr1_block, NULL);
+ }
+
+ if (main_thread_shutdown == 0 && read_ret != READ_OK)
+ {
+ return 1;
}
return 0;
@@ -819,8 +832,7 @@ int main(int argc, char ** argv)
printf("Recv buffer size: %u\n", NETWORK_BUFFER_MAX_SIZE);
printf("Connecting to `%s'..\n", serv_optarg);
- enum nDPIsrvd_connect_return connect_ret = nDPIsrvd_connect(sock);
- if (connect_ret != CONNECT_OK)
+ if (nDPIsrvd_connect(sock) != CONNECT_OK)
{
fprintf(stderr, "%s: nDPIsrvd socket connect to %s failed!\n", argv[0], serv_optarg);
nDPIsrvd_socket_free(&sock);