summaryrefslogtreecommitdiff
path: root/src/http_count.c
diff options
context:
space:
mode:
authoryzc <[email protected]>2020-01-06 17:31:51 +0800
committeryzc <[email protected]>2020-01-06 17:31:51 +0800
commitdb0fc62765a671d49d7d28e2d2ab42e26ffe8161 (patch)
tree2f4de1cc2a28dcf21dfa473fa4a1d55af0f5e79e /src/http_count.c
parent5aa9fd53c75928055e42bf8665d72a538d0301d7 (diff)
改成动态存储
Diffstat (limited to 'src/http_count.c')
-rw-r--r--src/http_count.c35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/http_count.c b/src/http_count.c
index 92bbf32..bd32d7c 100644
--- a/src/http_count.c
+++ b/src/http_count.c
@@ -6,14 +6,13 @@
#include "../../../opt/MESA/include/MESA/MESA_handle_logger.h"
#include "../../../opt/MESA/include/MESA/http.h"
-#define MAX_STR_LEN 256
-#define PERSIST_HASH_SIZE 512
-#define DOUBLE_DIRECTION 0x03
-#define MIN(a,b) ((a)<(b)?(a):(b))
-#define HTTP_CHECK_CONFIG "./plug/business/http_count/http_count.conf"
-#define BASIC_DIR "./plug/business/http_count/"
-#define HTTP_COUNT_PLUGNAME "http_count.so"
-#define JHASH_GOLDEN_RATIO 0x9e3779b9
+#define MAX_STR_LEN 256
+#define PERSIST_HASH_SIZE 512
+#define DOUBLE_DIRECTION 0x03
+#define HTTP_CHECK_CONFIG "./plug/business/http_count/http_count.conf"
+#define BASIC_DIR "./plug/business/http_count/"
+#define HTTP_COUNT_PLUGNAME "http_count.so"
+#define JHASH_GOLDEN_RATIO 0x9e3779b9
#define __jhash_mix(a, b, c)\
{\
a -= b; a -= c; a ^= (c>>13);\
@@ -42,8 +41,9 @@ enum statistics_type
struct http_count_node
{
struct http_count_node *next;
- char data[MAX_STR_LEN];
+ //char data[MAX_STR_LEN];
uint64_t count;//统计命中次数
+ char *data;
};
struct http_data_htable
@@ -63,10 +63,17 @@ int add_hlist_node(uint32_t key, char *buf, uint32_t buflen)
MESA_handle_runtime_log(g_http_count_log_handler, RLOG_LV_FATAL, HTTP_COUNT_PLUGNAME, "malloc node failed!");
return -1;
}
+ node->data = malloc(buflen+1);
+ if(!node->data)
+ {
+ printf("http_check.so: malloc node->data failed\n");
+ MESA_handle_runtime_log(g_http_count_log_handler, RLOG_LV_FATAL, HTTP_COUNT_PLUGNAME, "malloc node->data failed!");
+ return -1;
+ }
- memset(node, 0, sizeof(struct http_count_node));
strncpy(node->data, buf, buflen);
- node->count++;//命中次数
+ node->data[buflen] = 0;
+ node->count = 1;//命中次数
node->next = g_http_data_htable->hlist_head[key].next;
g_http_data_htable->hlist_head[key].next = node;
g_http_data_htable->hlist_head[key].count++;//哈希链节点数
@@ -148,13 +155,11 @@ uint32_t get_hash_key(void *buf, uint32_t buflen)
return (jhash(buf, buflen, 0) % PERSIST_HASH_SIZE);
}
-int http_count_statistics(char *buf, uint32_t len)
+int http_count_statistics(char *buf, uint32_t buflen)
{
uint32_t key = 0;
- uint32_t buflen = 0;
struct http_count_node *node = NULL;
- buflen = MIN(len, (MAX_STR_LEN-1));
key = get_hash_key(buf, buflen);
node = find_hlist_node(key, buf, buflen);
if(node)
@@ -281,6 +286,8 @@ void free_all(void)
{
head->next = free_node->next;
free_node->next = NULL;
+ free(free_node->data);
+ free_node->data = NULL;
free(free_node);
free_node = NULL;
}