Fixes #734 in public, , as well as rearchitects a number of SIP

control flows. Basically, there was a small bug where I forgot to listen
 for an OK, which caused transactions to stick around too long and fuck
 everything up. That was quickly fixed, but my compulsion required me to
 reorganize the code to avoid such errors in the future. I implemented
 another new feature as well, we now respond with a 480 Temporarily
 Unavailable message (rather than cancel) when canceling an INCOMING call.
 The prior behavior was incorrect.

git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@3264 19bc5d8c-e614-43d4-8b26-e1612bc8e597
This commit is contained in:
Kurtis Heimerl 2012-03-05 03:53:57 +00:00
parent 915aa7b1f7
commit 8d0a9799ef
7 changed files with 193 additions and 45 deletions

View file

@ -179,6 +179,8 @@ class TransactionEntry {
bool SIPFinished() { ScopedLock lock(mLock); return mSIP.finished(); }
bool instigator() { ScopedLock lock(mLock); return mSIP.instigator(); }
SIP::SIPState MOCSendINVITE(const char* calledUser, const char* calledDomain, short rtpPort, unsigned codec);
SIP::SIPState MOCResendINVITE();
SIP::SIPState MOCWaitForOK();
@ -200,10 +202,12 @@ class TransactionEntry {
void MTCInitRTP() { ScopedLock lock(mLock); mSIP.MTCInitRTP(); }
SIP::SIPState MODSendBYE();
SIP::SIPState MODSendUnavail();
SIP::SIPState MODSendCANCEL();
SIP::SIPState MODResendBYE();
SIP::SIPState MODResendCANCEL();
SIP::SIPState MODWaitForOK();
SIP::SIPState MODWaitForBYEOK();
SIP::SIPState MODWaitForCANCELOK();
SIP::SIPState MODWaitFor487();
SIP::SIPState MTDCheckBYE();