Skip to content

Commit

Permalink
[mi_xmlrpc_ng] added blacklists and whitelists for traced mi commands
Browse files Browse the repository at this point in the history
  • Loading branch information
ionutrazvanionita authored and razvancrainea committed Jan 27, 2017
1 parent 3998da7 commit e5604b0
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 11 deletions.
20 changes: 16 additions & 4 deletions modules/mi_xmlrpc_ng/http_fnc.c
Expand Up @@ -53,7 +53,8 @@
extern str http_root;
extern int version;
extern trace_dest t_dst;
extern httpd_api_t httpd_api;
extern httpd_api_t httpd_api;
extern int mi_trace_mod_id;

mi_xmlrpc_http_page_data_t html_page_data;

Expand Down Expand Up @@ -462,7 +463,7 @@ static inline struct mi_handler* mi_xmlrpc_http_build_async_handler(void)

struct mi_root* mi_xmlrpc_http_run_mi_cmd(const str* arg,
str *page, str *buffer, struct mi_handler **async_hdl,
union sockaddr_union* cl_socket)
union sockaddr_union* cl_socket, int* is_traced)
{
static str esc_buf = {NULL, 0};
struct mi_cmd *f;
Expand Down Expand Up @@ -513,6 +514,15 @@ struct mi_root* mi_xmlrpc_http_run_mi_cmd(const str* arg,
goto xml_error;
}

if ( ! is_traced ) {
LM_ERR("bad output is_traced param!\n");
return 0;
} else {
if ( f ) {
*is_traced = is_mi_cmd_traced( mi_trace_mod_id, f);
}
}

if (f->flags&MI_ASYNC_RPL_FLAG) {
/* We need to build an async handler */
hdl = mi_xmlrpc_http_build_async_handler();
Expand Down Expand Up @@ -616,8 +626,10 @@ struct mi_root* mi_xmlrpc_http_run_mi_cmd(const str* arg,
sv_socket = httpd_api.get_server_info();
}

mi_trace_request(cl_socket, sv_socket, miCmd.s, miCmd.len,
mi_cmd, &backend, t_dst);
if ( *is_traced ) {
mi_trace_request(cl_socket, sv_socket, miCmd.s, miCmd.len,
mi_cmd, &backend, t_dst);
}

*async_hdl = hdl;

Expand Down
2 changes: 1 addition & 1 deletion modules/mi_xmlrpc_ng/http_fnc.h
Expand Up @@ -99,7 +99,7 @@ void mi_xmlrpc_http_destroy_async_lock(void);

struct mi_root* mi_xmlrpc_http_run_mi_cmd(const str* arg,
str *page, str *buffer, struct mi_handler **async_hdl,
union sockaddr_union* cl_socket);
union sockaddr_union* cl_socket, int* is_cmd_traced);
int mi_xmlrpc_http_build_page(str* page, int max_page_len,
struct mi_root* tree);

Expand Down
29 changes: 23 additions & 6 deletions modules/mi_xmlrpc_ng/mi_xmlrpc_http.c
Expand Up @@ -52,7 +52,8 @@ httpd_api_t httpd_api;
static str trace_destination_name = {NULL, 0};
trace_dest t_dst;


int mi_trace_mod_id;
char* mi_trace_bwlist_s;

#define MI_XMLRPC_NOT_ACCEPTABLE_STR "406"
#define MI_XMLRPC_INTERNAL_ERROR_STR "500"
Expand Down Expand Up @@ -84,6 +85,7 @@ static param_export_t mi_params[] = {
{"http_root", STR_PARAM, &http_root.s},
{"format_version", INT_PARAM, &version},
{"trace_destination", STR_PARAM, &trace_destination_name.s},
{"trace_bwlist", STR_PARAM, &mi_trace_bwlist_s },
{0,0,0}
};

Expand Down Expand Up @@ -130,6 +132,14 @@ void proc_init(void)
LM_ERR("can't find correlation id params!\n");
exit(-1);
}

if ( mi_trace_api && mi_trace_bwlist_s ) {
if ( parse_mi_cmd_bwlist( mi_trace_mod_id,
mi_trace_bwlist_s, strlen(mi_trace_bwlist_s) ) < 0 ) {
LM_ERR("invalid bwlist <%s>!\n", mi_trace_bwlist_s);
exit(-1);
}
}
}


Expand Down Expand Up @@ -158,6 +168,8 @@ static int mod_init(void)
if (mi_trace_api && mi_trace_api->get_trace_dest_by_name) {
t_dst = mi_trace_api->get_trace_dest_by_name(&trace_destination_name);
}

mi_trace_mod_id = register_mi_trace_mod();
}

return 0;
Expand Down Expand Up @@ -312,7 +324,7 @@ int mi_xmlrpc_http_answer_to_connection (void *cls, void *connection,
struct mi_root *tree = NULL;
struct mi_handler *async_hdl;
int ret_code = MI_XMLRPC_OK;
int is_shm = 0;
int is_shm = 0, is_cmd_traced=0;

page->s = err_buf;
LM_DBG("START *** cls=%p, connection=%p, url=%s, method=%s, "
Expand All @@ -323,7 +335,7 @@ int mi_xmlrpc_http_answer_to_connection (void *cls, void *connection,
httpd_api.lookup_arg(connection, "1", *con_cls, &arg);
if (arg.s) {
tree = mi_xmlrpc_http_run_mi_cmd(&arg,
page, buffer, &async_hdl, cl_socket);
page, buffer, &async_hdl, cl_socket, &is_cmd_traced);
if (tree == MI_ROOT_ASYNC_RPL) {
LM_DBG("got an async reply\n");
tree = mi_xmlrpc_wait_async_reply(async_hdl);
Expand All @@ -335,24 +347,29 @@ int mi_xmlrpc_http_answer_to_connection (void *cls, void *connection,
LM_ERR("no reply\n");
*page = MI_XMLRPC_U_ERROR;

trace_xml( cl_socket, (char *)url, 0,
if ( is_cmd_traced ) {
trace_xml( cl_socket, (char *)url, 0,
&MI_XMLRPC_U_ERROR_REASON, MI_XMLRPC_INTERNAL_ERROR, 0);
}
} else {
LM_DBG("building on page [%p:%d]\n",
page->s, page->len);
if(0!=mi_xmlrpc_http_build_page(page, buffer->len, tree)){
LM_ERR("unable to build response\n");
*page = MI_XMLRPC_U_ERROR;

mi_trace_reply( sv_socket, cl_socket, MI_XMLRPC_INTERNAL_ERROR,
if ( is_cmd_traced )
mi_trace_reply( sv_socket, cl_socket, MI_XMLRPC_INTERNAL_ERROR,
&MI_XMLRPC_U_ERROR_REASON, 0, t_dst);
} else {
if (tree->code >= 400) {
MI_XMLRPC_PRINT_FAULT(page, tree->code, tree->reason);
}

mi_trace_reply( sv_socket, cl_socket, tree->code,
if ( is_cmd_traced) {
mi_trace_reply( sv_socket, cl_socket, tree->code,
&tree->reason, page, t_dst);
}
}
}
} else {
Expand Down

0 comments on commit e5604b0

Please sign in to comment.