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:larrin@192.168.1.13”;
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);