Moved some initialisation code when making an FS outgoing call so initialisation of some internal OpalConnection fields are done early enough.

git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@12129 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
Robert Joly 2009-02-18 01:04:28 +00:00
parent a4f115ee5c
commit da14c819c0
2 changed files with 27 additions and 25 deletions

View File

@ -138,7 +138,7 @@ static switch_call_cause_t create_outgoing_channel(switch_core_session_t *sessio
PString token;
FSManager & manager = opal_process->GetManager();
if (!manager.SetUpCall("local:", outbound_profile->destination_number, token)) {
if (!manager.SetUpCall("local:", outbound_profile->destination_number, token, outbound_profile)) {
return SWITCH_CAUSE_INVALID_NUMBER_FORMAT;
}
@ -156,19 +156,6 @@ static switch_call_cause_t create_outgoing_channel(switch_core_session_t *sessio
*new_session = connection->GetSession();
connection->SetLocalPartyName(outbound_profile->caller_id_number);
connection->SetDisplayName(outbound_profile->caller_id_name);
switch_caller_profile_t *caller_profile = switch_caller_profile_clone(*new_session, outbound_profile);
switch_channel_t *channel = switch_core_session_get_channel(*new_session);
char name[256] = "opal/";
switch_copy_string(name + 5, outbound_profile->destination_number, sizeof(name)-5);
switch_channel_set_name(channel, name);
switch_channel_set_flag(channel, CF_OUTBOUND);
switch_channel_set_caller_profile(channel, caller_profile);
switch_channel_set_state(channel, CS_INIT);
return SWITCH_CAUSE_SUCCESS;
}
@ -483,14 +470,14 @@ bool FSEndPoint::OnIncomingCall(OpalLocalConnection & connection)
OpalLocalConnection *FSEndPoint::CreateConnection(OpalCall & call, void *userData)
{
return new FSConnection(call, *this);
return new FSConnection(call, *this, (switch_caller_profile_t *)userData);
}
///////////////////////////////////////////////////////////////////////
FSConnection::FSConnection(OpalCall & call, FSEndPoint & endpoint)
FSConnection::FSConnection(OpalCall & call, FSEndPoint & endpoint, switch_caller_profile_t *outbound_profile)
: OpalLocalConnection(call, endpoint, NULL)
, m_endpoint(endpoint)
{
@ -502,6 +489,21 @@ FSConnection::FSConnection(OpalCall & call, FSEndPoint & endpoint)
tech_pvt = (opal_private_t *) switch_core_session_alloc(m_fsSession, sizeof(*tech_pvt));
tech_pvt->me = this;
switch_core_session_set_private(m_fsSession, tech_pvt);
if (outbound_profile != NULL) {
SetLocalPartyName(outbound_profile->caller_id_number);
SetDisplayName(outbound_profile->caller_id_name);
switch_caller_profile_t *caller_profile = switch_caller_profile_clone(m_fsSession, outbound_profile);
switch_channel_set_caller_profile(m_fsChannel, caller_profile);
PString name = "opal/";
name += outbound_profile->destination_number;
switch_channel_set_name(m_fsChannel, name);
switch_channel_set_flag(m_fsChannel, CF_OUTBOUND);
switch_channel_set_state(m_fsChannel, CS_INIT);
}
}

View File

@ -26,20 +26,20 @@
#ifndef __FREESWITCH_MOD_OPAL__
#define __FREESWITCH_MOD_OPAL__
#define HAVE_APR
#include <switch.h>
#include <switch_version.h>
#define MODNAME "mod_opal"
#undef strcasecmp
#undef strncasecmp
#include <ptlib.h>
#include <opal/manager.h>
#include <opal/localep.h>
#include <h323/h323ep.h>
#include <iax2/iax2ep.h>
#undef strcasecmp
#undef strncasecmp
#define HAVE_APR
#include <switch.h>
#include <switch_version.h>
#define MODNAME "mod_opal"
class FSEndPoint;
class FSManager;
@ -154,7 +154,7 @@ class FSConnection:public OpalLocalConnection {
PCLASSINFO(FSConnection, OpalLocalConnection)
public:
FSConnection(OpalCall & call, FSEndPoint & endpoint);
FSConnection(OpalCall & call, FSEndPoint & endpoint, switch_caller_profile_t *outbound_profile);
virtual bool OnIncoming();
virtual void OnReleased();