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