Merge pull request #56 in FS/freeswitch from ~OLEGSTOLYAR/freeswitch:master to master

* commit '49a3672e4206a2a730220ec4bc2426274441ef64':
  Add ability to log commands executed in mod_xml_rpc
This commit is contained in:
Mike Jerris 2014-10-29 12:59:43 -05:00
commit cba216ca27
2 changed files with 22 additions and 0 deletions

View File

@ -6,5 +6,11 @@
<param name="auth-realm" value="freeswitch"/> <param name="auth-realm" value="freeswitch"/>
<param name="auth-user" value="freeswitch"/> <param name="auth-user" value="freeswitch"/>
<param name="auth-pass" value="works"/> <param name="auth-pass" value="works"/>
<!-- regex pattern to match against commands called against this service.
If a command with arguments matches, it will be logged at INFO level -->
<!--<param name="commands-to-log" value=""/> -->
</settings> </settings>
</configuration> </configuration>

View File

@ -89,6 +89,7 @@ static struct {
TServer abyssServer; TServer abyssServer;
xmlrpc_registry *registryP; xmlrpc_registry *registryP;
switch_bool_t enable_websocket; switch_bool_t enable_websocket;
char *commands_to_log;
} globals; } globals;
SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_realm, globals.realm); SWITCH_DECLARE_GLOBAL_STRING_FUNC(set_global_realm, globals.realm);
@ -103,6 +104,8 @@ static switch_status_t do_config(void)
char *realm, *user, *pass, *default_domain; char *realm, *user, *pass, *default_domain;
default_domain = realm = user = pass = NULL; default_domain = realm = user = pass = NULL;
globals.commands_to_log = NULL;
if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) { if (!(xml = switch_xml_open_cfg(cf, &cfg, NULL))) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf); switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Open of %s failed\n", cf);
return SWITCH_STATUS_TERM; return SWITCH_STATUS_TERM;
@ -130,6 +133,8 @@ static switch_status_t do_config(void)
globals.virtual_host = switch_true(val); globals.virtual_host = switch_true(val);
} else if (!strcasecmp(var, "enable-websocket")) { } else if (!strcasecmp(var, "enable-websocket")) {
globals.enable_websocket = switch_true(val); globals.enable_websocket = switch_true(val);
} else if (!strcasecmp(var, "commands-to-log")) {
globals.commands_to_log = val;
} }
} }
} }
@ -800,6 +805,7 @@ abyss_bool handler_hook(TSession * r)
{ {
switch_stream_handle_t stream = { 0 }; switch_stream_handle_t stream = { 0 };
char *command; char *command;
char *full_command;
int i; int i;
char *fs_user = NULL, *fs_domain = NULL; char *fs_user = NULL, *fs_domain = NULL;
char *path_info = NULL; char *path_info = NULL;
@ -1055,6 +1061,16 @@ abyss_bool handler_hook(TSession * r)
/* switch_api_execute will stream INVALID COMMAND before it fails */ /* switch_api_execute will stream INVALID COMMAND before it fails */
switch_api_execute(command, api_str, NULL, &stream); switch_api_execute(command, api_str, NULL, &stream);
if (globals.commands_to_log != NULL) {
full_command = switch_mprintf("%s%s%s", command, (api_str==NULL ? "" : " "), api_str);
if (switch_regex_match(full_command, globals.commands_to_log) == SWITCH_STATUS_SUCCESS) {
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Executed HTTP request command: [%s].\n", full_command);
}
switch_safe_free(full_command);
}
r->responseStarted = TRUE; r->responseStarted = TRUE;
ResponseStatus(r, 200); /* we don't want an assertion failure */ ResponseStatus(r, 200); /* we don't want an assertion failure */
r->requestInfo.keepalive = 0; r->requestInfo.keepalive = 0;