[commit] r9883 - in freeswitch/trunk/src: . mod/applications/mod_commands
Author: anthm Date: Tue Oct 7 17:42:31 2008 New Revision: 9883 Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c freeswitch/trunk/src/switch_channel.c freeswitch/trunk/src/switch_core_session.c Log: more heartbeat work Modified: freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c ============================================================================== --- freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c (original) +++ freeswitch/trunk/src/mod/applications/mod_commands/mod_commands.c Tue Oct 7 17:42:31 2008 @@ -2321,6 +2321,57 @@ return SWITCH_STATUS_SUCCESS; } +#define HEARTBEAT_SYNTAX "<uuid> <on|off|<seconds>>" +SWITCH_STANDARD_API(uuid_session_heartbeat_function) +{ + char *mycmd = NULL, *argv[2] = { 0 }; + uint32_t seconds = 60; + int argc, tmp; + switch_core_session_t *l_session = NULL; + + if (switch_strlen_zero(cmd) || !(mycmd = strdup(cmd))) { + goto error; + } + + argc = switch_separate_string(mycmd, ' ', argv, (sizeof(argv) / sizeof(argv[0]))); + + if (argc != 2) { + goto error; + } + + if (!(l_session = switch_core_session_locate(argv[0]))) { + stream->write_function(stream, "-ERR Usage: cannot locate session.\n"); + return SWITCH_STATUS_SUCCESS; + } + + if (switch_is_number(argv[1])) { + tmp = atoi(argv[1]); + if (tmp > 0) { + seconds = tmp; + } + } else if (!switch_true(argv[1])) { + seconds = 0; + } + + if (seconds) { + switch_core_session_enable_heartbeat(l_session, seconds); + } else { + switch_core_session_disable_heartbeat(l_session); + } + + switch_core_session_rwunlock(l_session); + + switch_safe_free(mycmd); + stream->write_function(stream, "+OK\n"); + return SWITCH_STATUS_SUCCESS; + + error: + switch_safe_free(mycmd); + stream->write_function(stream, "-ERR Usage: uuid_session_heartbeat %s", HEARTBEAT_SYNTAX); + return SWITCH_STATUS_SUCCESS; + +} + #define SETVAR_SYNTAX "<uuid> <var> <value>" SWITCH_STANDARD_API(uuid_setvar_function) { @@ -2694,6 +2745,7 @@ switch_console_set_complete("add alias add"); switch_console_set_complete("add alias del"); SWITCH_ADD_API(commands_api_interface, "status", "status", status_function, ""); + SWITCH_ADD_API(commands_api_interface, "uuid_session_heartbeat", "uuid_session_heartbeat", uuid_session_heartbeat_function, HEARTBEAT_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_bridge", "uuid_bridge", uuid_bridge_function, ""); SWITCH_ADD_API(commands_api_interface, "uuid_setvar", "uuid_setvar", uuid_setvar_function, SETVAR_SYNTAX); SWITCH_ADD_API(commands_api_interface, "uuid_getvar", "uuid_getvar", uuid_getvar_function, GETVAR_SYNTAX); Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Tue Oct 7 17:42:31 2008 @@ -1633,7 +1633,7 @@ if (switch_is_number(var)) { tmp = atoi(var); - if (tmp > 10) { + if (tmp > 0) { seconds = tmp; } } else if (!switch_true(var)) { Modified: freeswitch/trunk/src/switch_core_session.c ============================================================================== --- freeswitch/trunk/src/switch_core_session.c (original) +++ freeswitch/trunk/src/switch_core_session.c Tue Oct 7 17:42:31 2008 @@ -783,14 +783,21 @@ SWITCH_DECLARE(void) switch_core_session_enable_heartbeat(switch_core_session_t *session, uint32_t seconds) { switch_assert(session != NULL); - switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s setting session heartbeat to %u second(s).", + + if (seconds < 10) { + seconds = 60; + } + + switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "%s setting session heartbeat to %u second(s).\n", switch_channel_get_name(session->channel), seconds); session->track_duration = seconds; + session->read_frame_count = 0; } SWITCH_DECLARE(void) switch_core_session_disable_heartbeat(switch_core_session_t *session) { switch_assert(session != NULL); + session->read_frame_count = 0; session->track_duration = 0; }
participants (1)
-
Freeswitch SVN