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_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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.