Use features of newer libpri if available.

git-svn-id: http://voip.null.ro/svn/yate@995 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
paulc 2006-08-15 13:51:46 +00:00
parent d025891874
commit 561b0cb634
2 changed files with 52 additions and 9 deletions

View File

@ -761,6 +761,32 @@ void PriChan::closeData()
m_span->unlock();
}
bool PriChan::progress()
{
if (!m_call) {
Debug(this,DebugWarn,"Progress request on %s channel %s (%s)",
chanStatus(),id().c_str(),address().c_str());
return false;
}
Debug(this,DebugInfo,"Progressing on %s (%s)",id().c_str(),address().c_str());
#ifdef PRI_PROGRESS
::pri_progress(m_span->pri(),m_call,m_chan,1);
#endif
return true;
}
bool PriChan::ringing()
{
if (!m_call) {
Debug(this,DebugWarn,"Ringing request on %s channel %s (%s)",
chanStatus(),id().c_str(),address().c_str());
return false;
}
Debug(this,DebugInfo,"Answering on %s (%s)",id().c_str(),address().c_str());
::pri_acknowledge(m_span->pri(),m_call,m_chan,1);
return true;
}
bool PriChan::answer()
{
if (!m_ring) {
@ -772,7 +798,7 @@ bool PriChan::answer()
m_timeout = 0;
status(chanStatus());
Debug(this,DebugInfo,"Answering on %s (%s)",id().c_str(),address().c_str());
::pri_answer(m_span->pri(),(q931_call*)m_call,m_chan,!m_isdn);
::pri_answer(m_span->pri(),m_call,m_chan,!m_isdn);
return true;
}
@ -795,8 +821,8 @@ void PriChan::hangup(int cause)
closeData();
m_ring = false;
if (m_call) {
::pri_hangup(m_span->pri(),(q931_call*)m_call,cause);
::pri_destroycall(m_span->pri(),(q931_call*)m_call);
::pri_hangup(m_span->pri(),m_call,cause);
::pri_destroycall(m_span->pri(),m_call);
m_call = 0;
Message *m = message("chan.hangup");
m->addParam("span",String(m_span->span()));
@ -846,7 +872,7 @@ void PriChan::gotDigits(const char *digits, bool overlapped)
void PriChan::sendDigit(char digit)
{
if (m_call)
::pri_information(m_span->pri(),(q931_call*)m_call,digit);
::pri_information(m_span->pri(),m_call,digit);
}
bool PriChan::call(Message &msg, const char *called)
@ -906,7 +932,7 @@ bool PriChan::call(Message &msg, const char *called)
::pri_sr_set_called(req,(char *)called,calledplan,complete);
::q931_setup(span()->pri(),m_call,req);
#else
::pri_call(m_span->pri(),(q931_call*)m_call,0/*transmode*/,m_chan,1/*exclusive*/,!m_isdn,
::pri_call(m_span->pri(),m_call,0/*transmode*/,m_chan,1/*exclusive*/,!m_isdn,
caller,callerplan,callername,callerpres,(char *)called,calledplan,layer1
);
#endif
@ -939,7 +965,12 @@ void PriChan::ring(pri_event_ring &ev)
m_call = call;
m_ring = true;
status(chanStatus());
#ifdef PRI_PROCEEDING_FULL
::pri_proceeding(m_span->pri(),m_call,m_chan,1);
#else
// we signal ringing without media if the library doesn't know any better
::pri_acknowledge(m_span->pri(),m_call,m_chan,0);
#endif
Message *m = message("chan.startup");
m->addParam("span",String(m_span->span()));
m->addParam("channel",String(m_chan));
@ -1016,17 +1047,26 @@ void PriChan::callRejected(const char* error, const char* reason, const Message*
hangup(cause);
}
bool PriChan::msgProgress(Message& msg)
{
if (!progress())
return true;
return Channel::msgProgress(msg);
}
bool PriChan::msgRinging(Message& msg)
{
status("ringing");
return true;
if (!ringing())
return true;
return Channel::msgRinging(msg);
}
bool PriChan::msgAnswered(Message& msg)
{
answer();
if (!answer())
return true;
dataChanged();
return true;
return Channel::msgAnswered(msg);
}
bool PriChan::msgTone(Message& msg, const char* tone)

View File

@ -171,6 +171,7 @@ public:
virtual ~PriChan();
virtual void disconnected(bool final, const char *reason);
virtual bool nativeConnect(DataEndpoint *peer);
virtual bool msgProgress(Message& msg);
virtual bool msgRinging(Message& msg);
virtual bool msgAnswered(Message& msg);
virtual bool msgTone(Message& msg, const char* tone);
@ -197,6 +198,8 @@ public:
bool call(Message &msg, const char *called = 0);
bool answer();
void answered();
bool progress();
bool ringing();
void idle();
void restart(bool outgoing = false);
virtual bool openData(const char* format, int echoTaps = 0) = 0;