diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2020-11-13 19:49:15 +0100 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2020-11-13 19:55:54 +0100 |
commit | a03e0c8ba8c9230a3890d6fbd813fcf051086e7f (patch) | |
tree | 9ff50e41fb0720ad75332993cd54defba137237c | |
parent | aac0e77a2c050995f921e39e9927098c5f7054a4 (diff) |
Fixed inconsistent callback function call if a token parsed.
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
-rw-r--r-- | dependencies/nDPIsrvd.h | 17 | ||||
-rw-r--r-- | examples/c-captured/c-captured.c | 12 |
2 files changed, 26 insertions, 3 deletions
diff --git a/dependencies/nDPIsrvd.h b/dependencies/nDPIsrvd.h index 320fdac08..4889abfa9 100644 --- a/dependencies/nDPIsrvd.h +++ b/dependencies/nDPIsrvd.h @@ -74,6 +74,7 @@ enum nDPIsrvd_parse_return PARSE_STRING_TOO_BIG, PARSE_INVALID_CLOSING_CHAR, PARSE_JSMN_ERROR, + PARSE_CALLBACK_ERROR, PARSE_LAST_ENUM_VALUE }; @@ -203,10 +204,24 @@ static inline enum nDPIsrvd_parse_return nDPIsrvd_parse(struct nDPIsrvd_socket * return PARSE_JSMN_ERROR; } + sock->jsmn.current_token = 0; + if (cb(sock, user_data) != CALLBACK_OK) + { + return PARSE_CALLBACK_ERROR; + } + for (sock->jsmn.current_token = 1; sock->jsmn.current_token < sock->jsmn.tokens_found; sock->jsmn.current_token++) { - cb(sock, user_data); + if (cb(sock, user_data) != CALLBACK_OK) + { + return PARSE_CALLBACK_ERROR; + } + } + + if (cb(sock, user_data) != CALLBACK_OK) + { + return PARSE_CALLBACK_ERROR; } memmove(sock->buffer.raw, diff --git a/examples/c-captured/c-captured.c b/examples/c-captured/c-captured.c index 8b6785aea..d2ca51c2c 100644 --- a/examples/c-captured/c-captured.c +++ b/examples/c-captured/c-captured.c @@ -17,7 +17,16 @@ static enum nDPIsrvd_callback_return nDPIsrvd_json_callback(struct nDPIsrvd_sock { (void)user_data; - if (sock->jsmn.current_token % 2 == 1) + if (sock->jsmn.current_token == 0) { + /* Start of a JSON string. */ + printf("JSON "); + } + else if (sock->jsmn.current_token == sock->jsmn.tokens_found) + { + /* End of a JSON string. */ + printf(" EoF\n"); + } + else if (sock->jsmn.current_token % 2 == 1) { printf("[%.*s : ", sock->jsmn.tokens[sock->jsmn.current_token].end - sock->jsmn.tokens[sock->jsmn.current_token].start, @@ -68,7 +77,6 @@ int main(int argc, char ** argv) default: break; } - printf("EoF\n"); } return 0; |