用户注册:注册类整理
int CSipRegister::Register(ConfigMessage CfgMsg,UserMessage UsMsg)
{
int i;
int retVal;
osip_message_t *reg = NULL;
i = eXosip_init ();
if (i != 0)
{
TRACE0("--Couldn't initialize eXosip!\n");
return -1;
}
else
{
TRACE0("--eXosip_init successfully!\n");
}
//侦听的端口
i = eXosip_listen_addr (IPPROTO_UDP, NULL, CfgMsg.contact_port, AF_INET, 0);
if (i != 0)
{
eXosip_quit ();
TRACE0 ("--Couldn't initialize transport layer!\n");
return -2;
}
eXosip_lock();
char from_url[160]={0};
char proxy_url[160]={0};
char contact_url[160]={0};
sprintf(from_url,"%s <sip:%s@%s>",UsMsg.m_TelNum,UsMsg.m_TelNum, CfgMsg.from_url);
sprintf(proxy_url,"sip:%s:%d", CfgMsg.proxy_url,CfgMsg.proxy_port);
sprintf(contact_url, "\"%s\" <sip:%s@%s:%d>", UsMsg.m_TelNum,UsMsg.m_TelNum, CfgMsg.contact_url,CfgMsg.contact_port);
int regid = eXosip_register_build_initial_register(from_url,proxy_url, contact_url, 3600, ®);
if (regid<0)
{
eXosip_unlock();
return -3;
}
eXosip_clear_authentication_info(); //去除上次加入的错误认证信息
//添加认证信息
if (eXosip_add_authentication_info(UsMsg.m_TelNum, UsMsg.m_TelNum, UsMsg.m_PassWd, "md5", NULL))
{
TRACE0("--Add_authentication_info failed\n");
eXosip_unlock();
return -4;
}
//发送注册信息
retVal = eXosip_register_send_register (regid, reg);
if (retVal != 0)
{
TRACE0 ("register_send_register failed\n");
eXosip_unlock();
return -5;
}
eXosip_unlock ();
return retVal;
}
我把这个注册过程分为六步:
1.sip初始化.
eXosip_init ();
2.侦听的端口
eXosip_listen_addr (IPPROTO_UDP, NULL, CfgMsg.contact_port, AF_INET, 0);
这里需要注意的是CfgMsg.contact_port是一个与对方建立连接所需的端口,这里我设置为12463.
3.构造注册信息
eXosip_register_build_initial_register()
4.去除上次加入的错误认证信息
eXosip_clear_authentication_info();
5.添加注册证书
eXosip_add_authentication_info()
6.发送注册信息
eXosip_register_send_register ();
这6步之后一个注册就建立了.
下面的做法是捕获PROXY发送回来的消息,
这里我通过开辟新线程的方法捕获,因为这个一个循环.
while (pDlg->m_LoginEventsFlag)
{
eXosip_event_t *event;
event = eXosip_event_wait (0, 50); //侦听是否有消息到来
eXosip_lock ();
eXosip_default_action(event);
eXosip_unlock();
if (event==NULL) {
continue;
}
//下面是一个SWITCH语句对捕获的消息进行处理.
}
主要就这两个消息:EXOSIP_REGISTRATION_SUCCESS,EXOSIP_REGISTRATION_FAILURE
捕获PROXY发送回来的消息,抓包可以看到先得到一个401应答,之后再得到一个200OK应答,这样就可以判断注册成功了.
这样,一个注册就建立了.
分享到:
相关推荐
基于SIP的SoftPhone的设计与实现基于SIP的SoftPhone的设计与实现基于SIP的SoftPhone的设计与实现基于SIP的SoftPhone的设计与实现基于SIP的SoftPhone的设计与实现
Avaya 2050 IP Softphone 使用手册
softphone for win下最好的软件电话,支持sip和h323!
很好用的Andriod SIP电话,音质很好,SIP设置可选
softphone seting up , help some one to build up one network call center Avaya Softphone 安装手册 第1.00版
坐席端电话控制开发接口文档,第三方应用程序通过AgentOcx控件与呼叫中心系统的应用服务器软件交付,AgentOcx提供接口供应用程序调用,AgentOcx采用TCP方式与AgentServer实现通信。包括:置闲置忙,来电处理,抢接,...
如果需要使用,记得更改js里面的url,端口号最好不要更改,当你使用端口号不能登录的时候再更改成自己的端口号,其次删除电弧好吗,删除按钮无效,得copy,剪切才有效
IPB Softphone Advanced 2.15.35.49 Setup.exe 试用期30天! 未找到破解方法
适用于JavaScript的RingCentral Softphone SDK ringcentral-web-phone和此项目有什么区别? 专为客户端设计,仅适用于浏览器。 该项目最初是为服务器和桌面设计的。 它不需要浏览器即可运行。 它也可以在浏览器中...
代码从https://code.google.com/p/sipeksdk/下载下来并且略微修改后的Sipek.SoftPhone; pjsipdll.dll是最新基于pjproject-2.3编译通过; http://download.csdn.net/detail/caiqin19880823/8183549
基于SIP的SoftPhone的设计与实现.pdf
ReactSoftPhone安装npm install --save react-softphone用法import React from 'react'import SoftPhone from 'react-softphone'import { WebSocketInterface } from 'jssip' ; const config = { domain : 'sip-...
20100 Softphone Test Plan v1.0.docx
web实现拨打电话动能,适用于呼叫中心,仅供参考,大神勿喷
针对ENUM标准的一个应用软件ENUM softphone,详细说明安装和使用方法,并介绍了ENUM SDK的特点。 ENUM标准是实现公用电话网和IP网络的重要技术。 该软件的功能有:PC到phone,pc到pc,ENUM查询等通信功能
基于sip协议的软电话ocx控件,可以方便简单的进行开发
它将允许您对用户进行身份验证并管理对twilio客户端的访问。 处理铃声和“前进”功能。 当有电话传入软件电话时,客户端将响铃并转到桌面的前端。 自更新组件。 您可以使用更新组件来更新应用程序的某些部分。 ...
本文介绍的是Nortel IP Softphone 2050产品手册(英文).
软电话 上构建的与python 3兼容的软件电话。 要使用流功能,请使用适合您需要的音频回调类。... 创建一个以通过pip install softphone进行pip install softphone 。 添加对多个同时呼叫的支持。 遗漏了什么?
基于Sipek实现的软电话客户端实例Demo