Feature: export dns_message_transaction_index_get and local stat

This commit is contained in:
liuxueli
2024-06-12 14:46:15 +00:00
parent 5ba9d3ce4a
commit aaba41c67c
7 changed files with 171 additions and 36 deletions

View File

@@ -13,6 +13,7 @@ extern "C"
#include "cJSON.h"
#include "dns_decoder.h"
#include "toml/toml.h"
#include "stellar/stellar.h"
#include "stellar/session.h"
@@ -22,11 +23,14 @@ extern "C"
}
#endif
#define DNS_DECODER_TEST_TOML_PATH "./etc/dns/dns_decoder.toml"
struct dns_decoder_test_plugin_env
{
int plugin_id;
int topic_id;
int result_index;
int commit_result_enable;
};
extern "C" int commit_test_result_json(cJSON *node, const char *name);
@@ -327,7 +331,14 @@ void dns_decoder_test_message_cb(struct session *ss, int topic_id, const void *m
dns_real_result_write_file(real_result_str);
free(real_result_str);
commit_test_result_json(real_result, result_name);
if(plugin_env->commit_result_enable==1)
{
commit_test_result_json(real_result, result_name);
}
else
{
cJSON_Delete(real_result);
}
}
void *dns_decoder_test_per_session_context_new(struct session *sess, void *plugin_env)
@@ -340,10 +351,81 @@ void dns_decoder_test_per_session_context_free(struct session *sess, void *sessi
}
int32_t dns_decoder_test_config_load(const char *cfg_path, struct dns_decoder_test_plugin_env *plugin_env)
{
FILE *fp=fopen(cfg_path, "r");
if (NULL==fp)
{
fprintf(stderr, "[%s:%d] Can't open config file: %s", __FUNCTION__, __LINE__, cfg_path);
return -1;
}
int32_t ret=0;
char errbuf[256]={0};
toml_table_t *root=toml_parse_file(fp, errbuf, sizeof(errbuf));
fclose(fp);
toml_table_t *decoder_tbl=toml_table_in(root, "decoder");
if(NULL==decoder_tbl)
{
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder]", __FUNCTION__, __LINE__, cfg_path);
toml_free(root);
return -1;
}
toml_table_t *dns_tbl=toml_table_in(decoder_tbl, "dns");
if(NULL==dns_tbl)
{
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns]", __FUNCTION__, __LINE__, cfg_path);
toml_free(root);
return -1;
}
toml_table_t *test_tbl=toml_table_in(dns_tbl, "test");
if(NULL==test_tbl)
{
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns.test]", __FUNCTION__, __LINE__, cfg_path);
toml_free(root);
return -1;
}
toml_datum_t commit_result_enable_val=toml_string_in(test_tbl, "commit_result_enable");
if(commit_result_enable_val.ok==0)
{
plugin_env->commit_result_enable=0;
fprintf(stderr, "[%s:%d] config file: %s has no key: [decoder.dns.test.commit_result_enable]", __FUNCTION__, __LINE__, cfg_path);
}
else
{
if(memcmp("no", commit_result_enable_val.u.s, strlen("no"))==0)
{
plugin_env->commit_result_enable=0;
}
else if(memcmp("yes", commit_result_enable_val.u.s, strlen("yes"))==0)
{
plugin_env->commit_result_enable=1;
}
else
{
plugin_env->commit_result_enable=1;
fprintf(stderr, "[%s:%d] config file: %s key: [decoder.dns.test.commit_result_enable] value is not yes or no", __FUNCTION__, __LINE__, cfg_path);
}
}
toml_free(root);
return ret;
}
extern "C" void *dns_decoder_test_init(struct stellar *st)
{
struct dns_decoder_test_plugin_env *plugin_env=(struct dns_decoder_test_plugin_env *)calloc(1, sizeof(struct dns_decoder_test_plugin_env));
plugin_env->result_index=1;
dns_decoder_test_config_load(DNS_DECODER_TEST_TOML_PATH, plugin_env);
plugin_env->plugin_id=stellar_session_plugin_register(st, dns_decoder_test_per_session_context_new, dns_decoder_test_per_session_context_free, plugin_env);
if(plugin_env->plugin_id<0)