SipX筆記

SipX筆記
 
1.       SipX基本用法
 
1.1    初始化SipX
 
//使用SipLineMgr執行SIP註冊,SipRefreshMgr完成定時SIP註冊信息更新
SipLineMgr *m_lineMgr = new SipLineMgr(); 
SipRefreshMgr *m_refreshMgr = new SipRefreshMgr();
m_lineMgr->StartLineMgr();
m_lineMgr->initializeRefreshMgr( m_refreshMgr );
 
SipUserAgent *m_SipAgent = new SipUserAgent(5090,
                                                   5090,
                                                   5091,
                                                   NULL,// public IP address (not used)
                                                   NULL,// default user (not used)
                                                   NULL,// default SIP address (not used)
                                                   NULL,// outbound proxy
                                                   NULL,// directory server
                                                   NULL,// registry server
                                                   NULL,// auth scheme
                                                   NULL,// auth realm
                                                   NULL,// auth DB
                                                   NULL,// auth user IDs
                                                   NULL,// auth passwords
                                                   NULL,// nat ping URL
                                                   0,   // nat ping frequency
                                                   "PING"// nat ping method
                                                   m_lineMgr, // lineMgr
                                                   SIP_DEFAULT_RTT, // sipFirstResendTimeout
                                                   TRUE,    // defaultToUaTransactions
                                                   -1,      // readBufferSize
                                                   OsServerTask::DEF_MAX_MSGS, // queueSize
                                                   false) ;    // bUseNextAvailablePort
 
     m_SipAgent->addMessageObserver(*this->getMessageQueue());
     m_SipAgent->start();
     m_refreshMgr->init( m_SipAgent );
     m_refreshMgr->StartRefreshMgr();
     m_refreshMgr->setLineMgr(m_lineMgr);
 
     while(!m_SipAgent->waitUntilReady())OsTask::delay(100);
 
this->start();     //this is a OsServerTask object,start it to handle sip message
 
 
1.2    執行Sip REGISTER
 
///We use SipLine to manager SIP REGISTER action
m_sipuser = sip:[email protected];
m_username = larrin;
SipLine line( m_sipuser.c_str(),                    // user entered url
                       m_sipuser.c_str(),                    // identity url
                       m_username.c_str(),                  // user
                       TRUE,                                // visible
                       SipLine::LINE_STATE_PROVISIONED,
                       TRUE,                                // auto enable
                       FALSE                                // use call handling
                       );
 
m_lineMgr->addLine( line );
UtlString cred_input;
UtlString cred_digest;
 
cred_input.append( m_username.c_str() );
cred_input.append( ":" );
cred_input.append( "192.168.1.13" ); //192.168.1.13 is sip realm
cred_input.append( ":" );
cred_input.append( m_password.c_str() );
 
NetMd5Codec::encode( cred_input.data(), cred_digest );
 
m_lineMgr->addCredentialForLine( m_sipuser.c_str(),
"192.168.1.13",
m_username.c_str(),
cred_digest,
HTTP_DIGEST_AUTHENTICATION);
 
m_lineMgr->enableLine(m_sipuser.c_str()); //enable this line to start
//sip REGISTER action
 
1.3    使用tapi回調方法獲得REGISTER狀態
前面的步驟初始化了Sip棧,同時啓動了SIP註冊過程。爲了瞭解SIP註冊過程的狀態,需要使用tapi回調方法,下面定義回調方法,並且註冊回調方法來獲取註冊狀態。
 
#include "net/TapiMgr.h"
 
void _sipxLineEventCallbackFn(const void* pSrc,
                             const char* szLineIdentifier,
                             SIPX_LINE_EVENT_TYPE_MAJOR major,
                             SIPX_LINE_EVENT_TYPE_MINOR minor)
{
     if(SIPX_LINE_EVENT_REGISTERED == major)        //註冊成功
     {
         printf("%s logged in/n",szLineIdentifier);
     }
     else if(major == SIPX_LINE_EVENT_REGISTERING) //正在註冊
     {
         printf("%s logging .../n",szLineIdentifier);
     }
}
 
註冊回調方法:
 
//回調方法在啓動Sip棧前設置
TapiMgr::getInstance().setTapiLineCallback(_sipxLineEventCallbackFn);
發佈了45 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章