From fbb10ee055bdeec86ae45849b053dab355a5aff7 Mon Sep 17 00:00:00 2001 From: paulc Date: Mon, 2 Jul 2012 15:30:52 +0000 Subject: [PATCH] Copy parameters to the disconnect list after prerouting. This allows setting parameters in chan.hangup and CDR for calls cancelled during routing. git-svn-id: http://yate.null.ro/svn/yate/trunk@5174 acf43c95-373e-0410-b603-e72c3f656dc1 --- engine/Channel.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/engine/Channel.cpp b/engine/Channel.cpp index 701064f0..650475a6 100644 --- a/engine/Channel.cpp +++ b/engine/Channel.cpp @@ -68,6 +68,8 @@ static Mutex s_callidMutex(false,"CallID"); // of call endpoints at the same time static Mutex s_mutex(true,"CallEndpoint"); static const String s_audioType = "audio"; +static const String s_copyParams = "copyparams"; + CallEndpoint::CallEndpoint(const char* id) : m_peer(0), m_id(id), m_mutex(0) @@ -596,7 +598,7 @@ Message* Channel::message(const char* name, const NamedList* original, const cha Message* msg = message(name,minimal,data); if (original) { if (!params) - params = original->getValue(YSTRING("copyparams")); + params = original->getValue(s_copyParams); if (!null(params)) msg->copyParams(*original,params); } @@ -829,7 +831,7 @@ void Channel::callRejected(const char* error, const char* reason, const Message* { Debug(this,DebugMild,"Call rejected error='%s' reason='%s' [%p]",error,reason,this); if (msg) { - const String* cp = msg->getParam(YSTRING("copyparams")); + const String* cp = msg->getParam(s_copyParams); if (!TelEngine::null(cp)) { s_paramMutex.lock(); parameters().copyParams(*msg,*cp); @@ -1602,6 +1604,12 @@ bool Router::route() Debug(m_driver,DebugInfo,"Connection '%s' vanished while prerouting!",m_id.c_str()); return false; } + const String* cp = m_msg->getParam(s_copyParams); + if (!TelEngine::null(cp)) { + Channel::paramMutex().lock(); + chan->parameters().copyParams(*m_msg,*cp); + Channel::paramMutex().unlock(); + } bool dropCall = ok && ((m_msg->retValue() == YSTRING("-")) || (m_msg->retValue() == YSTRING("error"))); if (dropCall) chan->callRejected(m_msg->getValue(YSTRING("error"),"unknown"), @@ -1658,7 +1666,7 @@ bool Router::route() const char* reason = m_msg->getValue(YSTRING("reason"), ((s_noconn == error) ? "Could not connect to target" : (const char*)0)); Message m(s_disconnected); - const String* cp = m_msg->getParam(YSTRING("copyparams")); + const String* cp = m_msg->getParam(s_copyParams); if (!TelEngine::null(cp)) m.copyParams(*m_msg,*cp); chan->complete(m);