【GBT28181开发:SIP协议实践】之设备目录查询

下面学习的是设备目录查询的流程,和设备信息的流程差不多,主要是描述的协议字段不同,模拟SPVMN系统向源设备查询其设备目录,记录下交互的消息,详细研究了下:

转载请注明出处:http://blog.csdn.net/longlong530


一.环境搭建:

环境准备:http://blog.csdn.net/longlong530/article/details/9176989

UAC(模拟IPC):

IP:192.168.10.177(同事人不在~,直接用自己的机子模拟了下)

Port:5061


UAS(模拟SIP服务器):

IP:192.168.10.177

Port:5060


SPVMN操作过程:
1.先选择调测设备类型
3.点击设备目录查询,会在左边的文本框中显示xml。
4.点击发送消息,右边对话框即可显示消息交互的过程。

5. 弹出目录信息查询结果:


二.业务时序图:



三.消息详解:

第一步,UAS-->UAC
设备目录查询命令同样是采用Message消息
Content-type头域为Application/MANSCDP+xml,设备目录查询命令采用MANSCDP协议格式,具体参见GBT28181国标。
请求命令包含命令类型(CmdType)、命令序列号(SN)、设备编码(DeviceID)
MESSAGE sip:34020000001320000001@3402000000 SIP/2.0
Call-ID: 4bef8622e9d66b2b60fae6b15f4a4f63@0.0.0.0
CSeq: 1 MESSAGE
From: <sip:34020000002000000001@3402000000>;tag=08052615_53173353_7e47bbc7-c29c-4299-803b-71f7367975bb
To: <sip:34020000001320000001@3402000000>
Max-Forwards: 70
Content-Type: Application/MANSCDP+xml
Route: <sip:34020000001320000001@192.168.10.177:5061;line=5c2d93a668f3d3b;lr>
Via: SIP/2.0/UDP 192.168.10.177:5060;branch=z9hG4bK7e47bbc7-c29c-4299-803b-71f7367975bb_53173353_9686809251402
Content-Length: 125

<?xml version="1.0"?>
<Query>
<CmdType>Catalog</CmdType>
<SN>248</SN>
<DeviceID>34020000001320000001</DeviceID>
</Query>

第二步,UAC-->UAS
UAC收到请求后,立马返回200 0K响应
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.10.177:5060;branch=z9hG4bK7e47bbc7-c29c-4299-803b-71f7367975bb_53173353_9686809251402
From: <sip:34020000002000000001@3402000000>;tag=08052615_53173353_7e47bbc7-c29c-4299-803b-71f7367975bb
To: <sip:34020000001320000001@3402000000>;tag=883575767
Call-ID: 4bef8622e9d66b2b60fae6b15f4a4f63@0.0.0.0
CSeq: 1 MESSAGE
User-Agent: eXosip/3.6.0
Content-Length: 0

第三步,UAC-->UAS
源设备响应服务器的设备信息查询请求,同样采用MANSCDP协议,返回目录相关信息

MESSAGE sip:34020000001320000001@192.168.10.177 SIP/2.0
Via: SIP/2.0/UDP 192.168.10.177:5061;rport=5061;branch=z9hG4bK3917727870;received=192.168.10.177
From: <sip:192.168.10.177:5060>;tag=2228745831
To: <sip:34020000001320000001@192.168.10.177>
Call-ID: 3993662053
CSeq: 20 MESSAGE
Content-Type: Application/MANSCDP+xml
Max-Forwards: 70
User-Agent: eXosip/3.6.0
Content-Length: 877

<?xml version="1.0"?>
<Response>
<CmdType>Catalog</CmdType>
<SN>248</SN>
<DeviceID>34020000001320000001</DeviceID>
<SumNum>1</SumNum>
<DeviceList Num="1">
<Item>
<DeviceID>34020000001320000001</DeviceID>
<Name>IPC</Name>
<Manufacturer>ChaoYuan</Manufacturer>
<Model>TEST001</Model>
<Owner>Owner1</Owner>
<CivilCode>CivilCode1</CivilCode>
<Block>Block1</Block>
<Address>Address1</Address>
<Parental>0</Parental>
<ParentID>34020000001320000001</ParentID>
<SafetyWay>0</SafetyWay>
<RegisterWay>1</RegisterWay>
<CertNum>CertNum1</CertNum>
<Certifiable>0</Certifiable>
<ErrCode>400</ErrCode>
<EndTime>2099-12-31T23:59:59</EndTime>
<Secrecy>0</Secrecy>
<IPAddress>192.168.10.117</IPAddress>
<Port>6000</Port>
<Password>Password1</Password>
<Status>OK</Status>
<Longitude>171.3</Longitude>
<Latitude>34.2</Latitude>
</Item>
</DeviceList>
</Response>

第四步,UAS-->UAC
服务器收到响应后,立马返回200 OK响应,整个查询业务结束。
SIP/2.0 200 OK
To: <sip:34020000001320000001@192.168.10.177>;tag=26545395_53173353_019caa42-43f0-4b6c-a07f-a9c2bfa80f34
Via: SIP/2.0/UDP 192.168.10.177:5061;rport=5061;branch=z9hG4bK3917727870;received=192.168.10.177
CSeq: 20 MESSAGE
Call-ID: 3993662053
From: <sip:192.168.10.177:5060>;tag=2228745831
Content-Length: 0


在基于GBT28181SIP协议组件开发中,SIP注册流程是非常重要的一部分。本文将介绍如何使用eXosip2实现SIP注册流程。 eXosip2是一个基于SIP协议的开源库,用于SIP消息的处理和生成。它提供了一些API,使得开发人员可以方便地使用SIP协议进行通信。在SIP注册流程中,我们需要使用eXosip2来发送SIP REGISTER消息,并处理响应消息。 首先,我们需要初始化eXosip2库。以下是初始化代码: ``` int ret = eXosip_init(); if (ret != 0) { // 初始化失败 } ``` 接下来,我们需要创建SIP账号并填写相关信息,例如SIP账号、密码、SIP服务器地址等。以下是创建SIP账号的代码: ``` eXosip_add_authentication_info(SIP_ACCOUNT, SIP_PASSWORD, NULL, "md5", NULL); eXosip_lock(); eXosip_register_build_initial_request(&registerId, SIP_SERVER, SIP_ACCOUNT, NULL, NULL, 3600, &request); eXosip_unlock(); ``` 在创建SIP账号后,我们需要发送SIP REGISTER消息到SIP服务器。以下是发送SIP REGISTER消息的代码: ``` eXosip_lock(); eXosip_register_send_request(registerId, request); eXosip_unlock(); ``` 发送SIP REGISTER消息后,我们需要等待SIP服务器的响应消息。以下是等待响应消息的代码: ``` eXosip_event_t *je = NULL; do { eXosip_lock(); je = eXosip_event_wait(0, 500); eXosip_unlock(); if (je != NULL && je->type == EXOSIP_REGISTRATION_FAILURE) { // 注册失败 } } while (je == NULL || je->type != EXOSIP_REGISTRATION_SUCCESS); ``` 当收到SIP服务器的响应消息后,我们需要检查响应消息的状态码,以确定SIP注册是否成功。以下是检查响应消息状态码的代码: ``` if (je->response->status_code == 200) { // 注册成功 } else { // 注册失败 } ``` 最后,我们需要释放eXosip2库。以下是释放eXosip2库的代码: ``` eXosip_quit(); ``` 通过以上步骤,我们就可以使用eXosip2实现SIP注册流程了。需要注意的是,以上代码只是简单地介绍了SIP注册流程的实现方法,实际应用中还需要考虑更多的情况,例如SIP服务器的负载均衡、多次注册尝试等。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值