[Freeswitch-svn] [commit] r10115 - freeswitch/trunk/src
Freeswitch SVN
anthm at freeswitch.org
Wed Oct 22 14:32:55 EDT 2008
Author: anthm
Date: Wed Oct 22 14:32:54 2008
New Revision: 10115
Modified:
freeswitch/trunk/src/switch_channel.c
Log:
pass pdd data to a leg on oubound calls using bridge
Modified: freeswitch/trunk/src/switch_channel.c
==============================================================================
--- freeswitch/trunk/src/switch_channel.c (original)
+++ freeswitch/trunk/src/switch_channel.c Wed Oct 22 14:32:54 2008
@@ -740,6 +740,9 @@
{
switch_assert(channel != NULL);
switch_set_flag_locked(channel, flags);
+ if (flags & CF_OUTBOUND) {
+ switch_channel_set_variable(channel, "is_outbound", "true");
+ }
}
SWITCH_DECLARE(void) switch_channel_set_state_flag(switch_channel_t *channel, switch_channel_flag_t flags)
@@ -755,6 +758,9 @@
{
switch_assert(channel != NULL);
switch_clear_flag_locked(channel, flags);
+ if (flags & CF_OUTBOUND) {
+ switch_channel_set_variable(channel, "is_outbound", NULL);
+ }
}
SWITCH_DECLARE(switch_channel_state_t) switch_channel_get_state(switch_channel_t *channel)
@@ -1254,6 +1260,11 @@
switch_assert(channel != NULL);
switch_assert(channel->caller_profile != NULL);
switch_mutex_lock(channel->profile_mutex);
+
+ if (!caller_profile->times) {
+ caller_profile->times = (switch_channel_timetable_t *) switch_core_alloc(caller_profile->pool, sizeof(*caller_profile->times));
+ }
+
if (channel->caller_profile) {
caller_profile->next = channel->caller_profile->originator_caller_profile;
channel->caller_profile->originator_caller_profile = caller_profile;
@@ -1464,6 +1475,18 @@
if (channel->caller_profile && channel->caller_profile->times) {
switch_mutex_lock(channel->profile_mutex);
channel->caller_profile->times->progress = switch_timestamp_now();
+ if (channel->caller_profile->originator_caller_profile) {
+ switch_core_session_t *other_session;
+ if ((other_session = switch_core_session_locate(channel->caller_profile->originator_caller_profile->uuid))) {
+ switch_channel_t *other_channel;
+ other_channel = switch_core_session_get_channel(other_session);
+ if (other_channel->caller_profile) {
+ other_channel->caller_profile->times->progress = channel->caller_profile->times->progress;
+ }
+ switch_core_session_rwunlock(other_session);
+ }
+ channel->caller_profile->originator_caller_profile->times->progress = channel->caller_profile->times->progress;
+ }
switch_mutex_unlock(channel->profile_mutex);
}
@@ -1506,10 +1529,22 @@
switch_channel_event_set_data(channel, event);
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();
+ if (channel->caller_profile->originator_caller_profile) {
+ switch_core_session_t *other_session;
+ if ((other_session = switch_core_session_locate(channel->caller_profile->originator_caller_profile->uuid))) {
+ switch_channel_t *other_channel;
+ other_channel = switch_core_session_get_channel(other_session);
+ if (other_channel->caller_profile) {
+ other_channel->caller_profile->times->progress_media = channel->caller_profile->times->progress_media;
+ }
+ switch_core_session_rwunlock(other_session);
+ }
+ channel->caller_profile->originator_caller_profile->times->progress_media = channel->caller_profile->times->progress_media;
+ }
switch_mutex_unlock(channel->profile_mutex);
}
More information about the Freeswitch-svn
mailing list