Nov_12_2023-Dev

This commit is contained in:
Ned Wright
2023-11-12 18:50:17 +00:00
parent 0869b8f24d
commit 3061342b45
114 changed files with 3627 additions and 1305 deletions

View File

@@ -13,19 +13,38 @@
#include "ParserBase.h"
#include <string.h>
#include "debug.h"
USE_DEBUG_FLAG(D_WAAP_PARSER);
// Max size for key and value that can be stored in memory (per thread)
#define MAX_KEY_SIZE 64*1024
#define MAX_VALUE_SIZE 64*1024
BufferedReceiver::BufferedReceiver(IParserReceiver &receiver)
:m_receiver(receiver),
m_flags(BUFFERED_RECEIVER_F_FIRST)
BufferedReceiver::BufferedReceiver(IParserReceiver &receiver, size_t parser_depth) :
m_receiver(receiver),
m_flags(BUFFERED_RECEIVER_F_FIRST),
m_parser_depth(parser_depth)
{
dbgTrace(D_WAAP_PARSER)
<< "parser_depth="
<< parser_depth;
}
int BufferedReceiver::onKey(const char *k, size_t k_len)
{
dbgTrace(D_WAAP_PARSER)
<< "Entering BufferedReceiver::onKey with values: \n"
<< "\tkey = "
<< k
<< "\n\tk_len = "
<< k_len
<< "\n\tm_key = "
<< m_key
<< "\n\t m_key_size = "
<< m_key.size()
<< "\n\t parser_depth = "
<< m_parser_depth;
if (m_key.size() + k_len < MAX_KEY_SIZE) {
m_key += std::string(k, k_len);
}
@@ -36,7 +55,18 @@ int BufferedReceiver::onKey(const char *k, size_t k_len)
int BufferedReceiver::onValue(const char *v, size_t v_len)
{
int rc = 0;
dbgTrace(D_WAAP_PARSER)
<< "Entering BufferedReceiver::onValue with values: \n"
<< "\tvalue = "
<< v
<< "\n\tv_len = "
<< v_len
<< "\n\tm_value = "
<< m_value
<< "\n\t m_value_size = "
<< m_value.size()
<< "\n\t parser_depth = "
<< m_parser_depth;
while (v_len > 0) {
// Move data from buffer v to accumulated m_value string in an attempt to fill m_value to its max size
size_t bytesToFill = std::min(v_len, MAX_VALUE_SIZE - m_value.size());
@@ -48,7 +78,18 @@ int BufferedReceiver::onValue(const char *v, size_t v_len)
// Only push full buffers to the m_receiver
if (m_value.size() == MAX_VALUE_SIZE) {
// The first full-size buffer will be pushed with BUFFERED_RECEIVER_F_FIRST flag
int tempRc= m_receiver.onKv(m_key.data(), m_key.size(), m_value.data(), m_value.size(), m_flags);
dbgTrace(D_WAAP_PARSER)
<< " The first full-size buffer will be pushed with BUFFERED_RECEIVER_F_FIRST flag"
<< "calling onKv() while m_flags = "
<< m_flags;
int tempRc= m_receiver.onKv(
m_key.data(),
m_key.size(),
m_value.data(),
m_value.size(),
m_flags,
m_parser_depth
);
if (tempRc != 0) {
rc = tempRc;
}
@@ -68,16 +109,19 @@ int BufferedReceiver::onKvDone()
// Call onKv on the remainder of the buffer not yet pushed to the receiver
// This must be called even if m_value is empty in order to signal the BUFFERED_RECEIVER_F_LAST flag to the
// receiver!
int rc = onKv(m_key.data(), m_key.size(), m_value.data(), m_value.size(), m_flags);
dbgTrace(D_WAAP_PARSER)
<< " Call onKv on the remainder of the buffer not yet pushed to the receiver "
<< "calling onKv()";
int rc = onKv(m_key.data(), m_key.size(), m_value.data(), m_value.size(), m_flags, m_parser_depth);
// Reset the object's state to allow reuse for other parsers
clear();
return rc;
}
int BufferedReceiver::onKv(const char *k, size_t k_len, const char *v, size_t v_len, int flags)
int BufferedReceiver::onKv(const char *k, size_t k_len, const char *v, size_t v_len, int flags, size_t parser_depth)
{
return m_receiver.onKv(k, k_len, v, v_len, flags);
return m_receiver.onKv(k, k_len, v, v_len, flags, parser_depth);
}
void BufferedReceiver::clear()