summaryrefslogtreecommitdiff
path: root/decoders/http/http_decoder_string.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'decoders/http/http_decoder_string.cpp')
-rw-r--r--decoders/http/http_decoder_string.cpp156
1 files changed, 93 insertions, 63 deletions
diff --git a/decoders/http/http_decoder_string.cpp b/decoders/http/http_decoder_string.cpp
index d54d22b..88abd17 100644
--- a/decoders/http/http_decoder_string.cpp
+++ b/decoders/http/http_decoder_string.cpp
@@ -2,11 +2,12 @@
#include <stdlib.h>
#include <string.h>
#include <assert.h>
-#include "http_decoder_inc.h"
+#include "http_decoder_private.h"
static const char *string_state_to_desc(enum string_state state)
{
- switch (state) {
+ switch (state)
+ {
case STRING_STATE_INIT:
return "init";
break;
@@ -25,22 +26,23 @@ static const char *string_state_to_desc(enum string_state state)
}
}
-void http_decoder_string_refer(struct http_decoder_string *rstr,
- const char *at, size_t length)
+void http_decoder_string_refer(struct http_decoder_string *rstr, const char *at, size_t length)
{
- if (NULL == rstr) {
+ if (NULL == rstr)
+ {
return;
}
- switch (rstr->state) {
- case STRING_STATE_INIT:
- case STRING_STATE_CACHE:
- rstr->refer.iov_base = (char *)at;
- rstr->refer.iov_len = length;
- break;
- default:
- abort();
- break;
+ switch (rstr->state)
+ {
+ case STRING_STATE_INIT:
+ case STRING_STATE_CACHE:
+ rstr->refer.iov_base = (char *)at;
+ rstr->refer.iov_len = length;
+ break;
+ default:
+ abort();
+ break;
}
rstr->state = STRING_STATE_REFER;
@@ -48,22 +50,28 @@ void http_decoder_string_refer(struct http_decoder_string *rstr,
static void string_refer2cache(struct http_decoder_string *rstr)
{
- if (0 == rstr->refer.iov_len) {
+ if (0 == rstr->refer.iov_len)
+ {
return;
}
- if (rstr->cache.iov_len >= rstr->max_cache_size) {
+ if (rstr->cache.iov_len >= rstr->max_cache_size)
+ {
return;
}
size_t length = rstr->cache.iov_len + rstr->refer.iov_len;
- if (length > rstr->max_cache_size) {
+ if (length > rstr->max_cache_size)
+ {
length = rstr->max_cache_size;
}
- if (NULL == rstr->cache.iov_base) {
+ if (NULL == rstr->cache.iov_base)
+ {
rstr->cache.iov_base = CALLOC(char, length + 1);
memcpy(rstr->cache.iov_base, rstr->refer.iov_base, length);
- } else {
+ }
+ else
+ {
rstr->cache.iov_base = REALLOC(char, rstr->cache.iov_base, length + 1);
memcpy((char *)rstr->cache.iov_base + rstr->cache.iov_len, rstr->refer.iov_base,
(length - rstr->cache.iov_len));
@@ -77,24 +85,32 @@ static void string_refer2cache(struct http_decoder_string *rstr)
static void string_commit2cache(struct http_decoder_string *rstr)
{
if (rstr->cache.iov_len == rstr->commit.iov_len &&
- rstr->cache.iov_base == rstr->commit.iov_base) {
+ rstr->cache.iov_base == rstr->commit.iov_base)
+ {
rstr->commit.iov_base = NULL;
rstr->commit.iov_len = 0;
return;
}
- //Only http header key need to backward to cache
+ // Only http header key need to backward to cache
size_t length = 0;
- if (rstr->commit.iov_len > rstr->max_cache_size) {
+ if (rstr->commit.iov_len > rstr->max_cache_size)
+ {
length = rstr->max_cache_size;
- } else {
+ }
+ else
+ {
length = rstr->commit.iov_len;
}
- if (length > 0) {
- if (NULL == rstr->cache.iov_base) {
+ if (length > 0)
+ {
+ if (NULL == rstr->cache.iov_base)
+ {
rstr->cache.iov_base = CALLOC(char, length + 1);
- } else {
+ }
+ else
+ {
abort();
}
memcpy(rstr->cache.iov_base, rstr->commit.iov_base, length);
@@ -107,18 +123,20 @@ static void string_commit2cache(struct http_decoder_string *rstr)
void http_decoder_string_cache(struct http_decoder_string *rstr)
{
- if (NULL == rstr) {
+ if (NULL == rstr)
+ {
return;
}
- switch (rstr->state) {
+ switch (rstr->state)
+ {
case STRING_STATE_REFER:
string_refer2cache(rstr);
break;
case STRING_STATE_CACHE:
break;
case STRING_STATE_COMMIT:
- //commit backward to cache
+ // commit backward to cache
string_commit2cache(rstr);
break;
default:
@@ -130,34 +148,39 @@ void http_decoder_string_cache(struct http_decoder_string *rstr)
void http_decoder_string_commit(struct http_decoder_string *rstr)
{
- if (NULL == rstr) {
+ if (NULL == rstr)
+ {
return;
}
- switch (rstr->state) {
- case STRING_STATE_REFER:
- if (rstr->cache.iov_len) {
- http_decoder_string_cache(rstr);
-
- rstr->commit.iov_base = rstr->cache.iov_base;
- rstr->commit.iov_len = rstr->cache.iov_len;
- // not overwrite rstr->cache.iov_base
- } else {
- rstr->commit.iov_base = rstr->refer.iov_base;
- rstr->commit.iov_len = rstr->refer.iov_len;
-
- rstr->refer.iov_base = NULL;
- rstr->refer.iov_len = 0;
- }
- break;
- case STRING_STATE_CACHE:
+ switch (rstr->state)
+ {
+ case STRING_STATE_REFER:
+ if (rstr->cache.iov_len)
+ {
+ http_decoder_string_cache(rstr);
+
rstr->commit.iov_base = rstr->cache.iov_base;
rstr->commit.iov_len = rstr->cache.iov_len;
// not overwrite rstr->cache.iov_base
- break;
- default:
- //abort();
- break;
+ }
+ else
+ {
+ rstr->commit.iov_base = rstr->refer.iov_base;
+ rstr->commit.iov_len = rstr->refer.iov_len;
+
+ rstr->refer.iov_base = NULL;
+ rstr->refer.iov_len = 0;
+ }
+ break;
+ case STRING_STATE_CACHE:
+ rstr->commit.iov_base = rstr->cache.iov_base;
+ rstr->commit.iov_len = rstr->cache.iov_len;
+ // not overwrite rstr->cache.iov_base
+ break;
+ default:
+ // abort();
+ break;
}
rstr->state = STRING_STATE_COMMIT;
@@ -167,7 +190,8 @@ void http_decoder_string_reset(struct http_decoder_string *rstr)
{
assert(rstr);
- switch (rstr->state) {
+ switch (rstr->state)
+ {
case STRING_STATE_INIT:
case STRING_STATE_REFER:
case STRING_STATE_CACHE:
@@ -183,26 +207,27 @@ void http_decoder_string_reset(struct http_decoder_string *rstr)
rstr->state = STRING_STATE_INIT;
}
-
-void http_decoder_string_init(struct http_decoder_string *rstr,
- size_t max_cache_size)
+void http_decoder_string_init(struct http_decoder_string *rstr, size_t max_cache_size)
{
rstr->max_cache_size = max_cache_size;
}
void http_decoder_string_reinit(struct http_decoder_string *rstr)
{
- if (rstr->state == STRING_STATE_CACHE) {
+ if (rstr->state == STRING_STATE_CACHE)
+ {
return;
}
if (rstr->state == STRING_STATE_COMMIT &&
rstr->cache.iov_base == rstr->commit.iov_base &&
- rstr->cache.iov_len == rstr->commit.iov_len) {
+ rstr->cache.iov_len == rstr->commit.iov_len)
+ {
return;
}
- if (rstr->cache.iov_base != NULL) {
+ if (rstr->cache.iov_base != NULL)
+ {
FREE(rstr->cache.iov_base);
rstr->cache.iov_len = 0;
}
@@ -213,7 +238,7 @@ void http_decoder_string_reinit(struct http_decoder_string *rstr)
rstr->commit.iov_base = NULL;
rstr->commit.iov_len = 0;
rstr->state = STRING_STATE_INIT;
-#endif
+#endif
}
enum string_state http_decoder_string_state(const struct http_decoder_string *rstr)
@@ -223,14 +248,18 @@ enum string_state http_decoder_string_state(const struct http_decoder_string *rs
int http_decoder_string_get(const struct http_decoder_string *rstr, hstring *out)
{
- if (NULL == rstr || NULL == out) {
+ if (NULL == rstr || NULL == out)
+ {
return -1;
}
- if (http_decoder_string_state(rstr) == STRING_STATE_COMMIT) {
+ if (http_decoder_string_state(rstr) == STRING_STATE_COMMIT)
+ {
out->iov_base = rstr->commit.iov_base;
out->iov_len = rstr->commit.iov_len;
- } else {
+ }
+ else
+ {
out->iov_base = NULL;
out->iov_len = 0;
}
@@ -240,7 +269,8 @@ int http_decoder_string_get(const struct http_decoder_string *rstr, hstring *out
void http_decoder_string_dump(struct http_decoder_string *rstr, const char *desc)
{
- if (NULL == rstr) {
+ if (NULL == rstr)
+ {
return;
}