【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简介 eXosip2是一个基于SIP标准的开源协议栈,它提供了一组API,可以用来实现SIP客户端和服务端。eXosip2具有高度的可移植性和灵活性,可以在不同平台上运行。eXosip2的主要特点包括: 1. 遵循SIP标准,功能齐全。 2. 支持IPv4和IPv6协议栈。 3. 支持TLS和SRTP协议。 4. 提供了一组易于使用的API,方便开发人员进行二次开发。 5. 可以在不同的平台上运行,包括Linux、Windows、Android等。 二、eXosip2的使用 1. 安装eXosip2库 首先需要安装eXosip2库,可以通过以下命令在Ubuntu下安装: sudo apt-get install libexosip2-dev 2. 初始化eXosip2 在使用eXosip2之前,需要初始化eXosip2库,这可以通过调用eXosip_init函数来实现。例如: eXosip_t *g_eXosipContext=NULL; g_eXosipContext = eXosip_malloc(); if (g_eXosipContext!=NULL) { iRet = eXosip_init(g_eXosipContext); } 3. 注册SIP服务器 使用eXosip2可以实现SIP服务器的注册,这可以通过调用eXosip_register_build函数构造注册消息,然后通过调用eXosip_register_send发送注册消息。例如: eXosip_event_t *pEvent = NULL; osip_message_t *pMsg = NULL; int iRet = 0; iRet = eXosip_register_build_initial_register(g_eXosipContext, "sip:192.168.1.100", "sip:192.168.1.100", "sip:192.168.1.100", 3600, &pMsg); if (iRet == 0) { iRet = eXosip_register_send_register(g_eXosipContext, pMsg); osip_message_free(pMsg); } 4. 接收SIP消息 使用eXosip2可以接收SIP消息,这可以通过调用eXosip_listen函数实现。例如: while (1) { iRet = eXosip_listen(g_eXosipContext, 0, &pEvent); if (iRet >= 0) { switch (pEvent->type) { case EXOSIP_REGISTRATION_SUCCESS: // 注册成功 break; case EXOSIP_REGISTRATION_FAILURE: // 注册失败 break; case EXOSIP_MESSAGE_NEW: // 收到新的SIP消息 break; } eXosip_event_free(pEvent); } } 5. 回复SIP消息 使用eXosip2可以回复SIP消息,这可以通过调用eXosip_message_build_response函数构造回复消息,然后通过调用eXosip_message_send_response发送回复消息。例如: osip_message_t *pMsg = NULL; int iRet = 0; iRet = eXosip_message_build_response(pEvent->tid, 200, &pMsg); if (iRet == 0) { iRet = eXosip_message_send_response(g_eXosipContext, pEvent->tid, 200, pMsg); osip_message_free(pMsg); } 三、总结 本文介绍了如何使用eXosip2实现SIP服务端流程。eXosip2是一个功能齐全、易于使用的SIP协议栈,可以方便地实现SIP客户端和服务端。在GBT28181SIP协议组件开发中,eXosip2是一个非常好的选择。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值