[commit] r8568 - in freeswitch/trunk/src: . include
Author: anthm Date: Fri May 23 21:43:12 2008 New Revision: 8568 Modified: freeswitch/trunk/src/include/switch_channel.h freeswitch/trunk/src/switch_channel.c freeswitch/trunk/src/switch_ivr.c Log: update Modified: freeswitch/trunk/src/include/switch_channel.h ============================================================================== --- freeswitch/trunk/src/include/switch_channel.h (original) +++ freeswitch/trunk/src/include/switch_channel.h Fri May 23 21:43:12 2008 @@ -44,6 +44,8 @@ switch_time_t profile_created; switch_time_t created; switch_time_t answered; + switch_time_t progress; + switch_time_t progress_media; switch_time_t hungup; switch_time_t transferred; struct switch_channel_timetable *next; Modified: freeswitch/trunk/src/switch_channel.c ============================================================================== --- freeswitch/trunk/src/switch_channel.c (original) +++ freeswitch/trunk/src/switch_channel.c Fri May 23 21:43:12 2008 @@ -1141,6 +1141,8 @@ if (channel->caller_profile && channel->caller_profile->times) { channel->caller_profile->times->transferred = caller_profile->times->profile_created; caller_profile->times->answered = channel->caller_profile->times->answered; + caller_profile->times->progress = channel->caller_profile->times->progress; + caller_profile->times->progress_media = channel->caller_profile->times->progress_media; caller_profile->times->created = channel->caller_profile->times->created; caller_profile->times->hungup = channel->caller_profile->times->hungup; } else { @@ -1373,6 +1375,12 @@ return SWITCH_STATUS_SUCCESS; } + if (channel->caller_profile && channel->caller_profile->times) { + switch_mutex_lock(channel->profile_mutex); + channel->caller_profile->times->progress = switch_timestamp_now(); + switch_mutex_unlock(channel->profile_mutex); + } + return SWITCH_STATUS_FALSE; } @@ -1394,6 +1402,12 @@ switch_event_fire(&event); } + if (channel->caller_profile && channel->caller_profile->times) { + switch_mutex_lock(channel->profile_mutex); + channel->caller_profile->times->progress_media = switch_timestamp_now(); + switch_mutex_unlock(channel->profile_mutex); + } + /* if we're the child of another channel and the other channel is in a blocking read they will never realize we have answered so send a SWITCH_SIG_BREAK to interrupt any blocking reads on that channel */ @@ -1922,10 +1936,10 @@ switch_caller_profile_t *caller_profile, *ocp; switch_app_log_t *app_log, *ap; char *last_app = NULL, *last_arg = NULL; - char start[80] = "", answer[80] = "", end[80] = "", tmp[80] = "", profile_start[80] = ""; + char start[80] = "", answer[80] = "", progress[80] = "", progress_media[80] = "", end[80] = "", tmp[80] = "", profile_start[80] = ""; int32_t duration = 0, legbillsec = 0, billsec = 0, mduration = 0, billmsec = 0, legbillmsec = 0; switch_time_t uduration = 0, legbillusec = 0, billusec = 0; - time_t tt_created = 0, tt_answered = 0, tt_hungup = 0, mtt_created = 0, mtt_answered = 0, mtt_hungup = 0, tt_prof_created, mtt_prof_created; + time_t tt_created = 0, tt_answered = 0, tt_progress = 0, tt_progress_media = 0, tt_hungup = 0, mtt_created = 0, mtt_answered = 0, mtt_hungup = 0, tt_prof_created, mtt_prof_created, mtt_progress = 0 , mtt_progress_media = 0; if (!(caller_profile = switch_channel_get_caller_profile(channel)) || !channel->variables) { return SWITCH_STATUS_FALSE; @@ -1968,6 +1982,18 @@ switch_channel_set_variable(channel, "answer_stamp", answer); } + if (caller_profile->times->progress) { + switch_time_exp_lt(&tm, caller_profile->times->progress); + switch_strftime(progress, &retsize, sizeof(progress), fmt, &tm); + switch_channel_set_variable(channel, "progress_stamp", progress); + } + + if (caller_profile->times->progress_media) { + switch_time_exp_lt(&tm, caller_profile->times->progress_media); + switch_strftime(progress_media, &retsize, sizeof(progress_media), fmt, &tm); + switch_channel_set_variable(channel, "progress_media_stamp", progress_media); + } + switch_time_exp_lt(&tm, caller_profile->times->hungup); switch_strftime(end, &retsize, sizeof(end), fmt, &tm); switch_channel_set_variable(channel, "end_stamp", end); @@ -1993,6 +2019,20 @@ switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->answered); switch_channel_set_variable(channel, "answer_uepoch", tmp); + tt_progress = (time_t) (caller_profile->times->progress / 1000000); + mtt_progress = (time_t) (caller_profile->times->progress / 1000); + switch_snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, tt_progress); + switch_channel_set_variable(channel, "answer_epoch", tmp); + switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->progress); + switch_channel_set_variable(channel, "answer_uepoch", tmp); + + tt_progress_media = (time_t) (caller_profile->times->progress_media / 1000000); + mtt_progress_media = (time_t) (caller_profile->times->progress_media / 1000); + switch_snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, tt_progress_media); + switch_channel_set_variable(channel, "answer_epoch", tmp); + switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->progress_media); + switch_channel_set_variable(channel, "answer_uepoch", tmp); + tt_hungup = (time_t) (caller_profile->times->hungup / 1000000); mtt_hungup = (time_t) (caller_profile->times->hungup / 1000); Modified: freeswitch/trunk/src/switch_ivr.c ============================================================================== --- freeswitch/trunk/src/switch_ivr.c (original) +++ freeswitch/trunk/src/switch_ivr.c Fri May 23 21:43:12 2008 @@ -1583,6 +1583,19 @@ switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->profile_created); switch_xml_set_txt_d(time_tag, tmp); + if (!(time_tag = switch_xml_add_child_d(x_times, "progress_time", t_off++))) { + goto error; + } + switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->progress); + switch_xml_set_txt_d(time_tag, tmp); + + + if (!(time_tag = switch_xml_add_child_d(x_times, "progress_media_time", t_off++))) { + goto error; + } + switch_snprintf(tmp, sizeof(tmp), "%" SWITCH_TIME_T_FMT, caller_profile->times->progress_media); + switch_xml_set_txt_d(time_tag, tmp); + if (!(time_tag = switch_xml_add_child_d(x_times, "answered_time", t_off++))) { goto error; }
participants (1)
-
Freeswitch SVN