Skip to content

Phase 7:GB/T 28181-2016 应用层消息(MANSCDP XML) - #11

Draft
lixuanqun wants to merge 1 commit into
cursor/dialog-ua-3c36from
cursor/gb28181-3c36
Draft

Phase 7:GB/T 28181-2016 应用层消息(MANSCDP XML)#11
lixuanqun wants to merge 1 commit into
cursor/dialog-ua-3c36from
cursor/gb28181-3c36

Conversation

@lixuanqun

Copy link
Copy Markdown
Owner

概述

完成第一阶段目标(B 场景):GB28181 国标应用层。新模块 sip-gb28181 把 MANSCDP XML 消息纳入协议栈。

🔗 stacked on PR #10

新模块结构

sip-gb28181
├── GbCommand           国标 CmdType 枚举(10 个标准命令)
├── GbXmlBuilder        手写 XML 构造器
├── GbXmlParser         手写 XML 解析器(针对 GB28181 扁平结构调优)
└── GbMessages          常用消息建造 + SIP MESSAGE 封装

GbCommand

10 个标准 CmdType:

  • KEEPALIVE — 心跳
  • CATALOG — 设备目录查询
  • DEVICE_INFO / DEVICE_STATUS / DEVICE_CONTROL / DEVICE_CONFIG
  • ALARM — 报警通知
  • MOBILE_POSITION — 移动位置
  • RECORD_INFO — 历史录像查询
  • BROADCAST — 语音广播

GbCommand.of(wireName) 大小写不敏感;未知 CmdType 抛 IllegalArgumentException

XML

  • GbXmlBuilderenvelope("Notify").text("CmdType", "Keepalive").text("SN", "1").build()
  • GbXmlParser — 处理 declaration、self-closing、entity unescape(含 numeric &#x...
  • 故意只支持扁平结构(root + 子元素的 name/text 对),不支持嵌套/属性/命名空间 — GB28181 用不到,避免拉 JAXB 依赖

GbMessages

把 MANSCDP XML 封装到 SIP MESSAGE 请求:

SipRequest req = GbMessages.manscdpMessage(
    target, local, requestUri,
    fromTag, callId, cseq,
    GbMessages.catalogQueryXml(sn, deviceId),
    viaSentBy);
  • 自动设置 Content-Type: Application/MANSCDP+xml
  • 自动 Via + Branch + User-Agent

测试

11 个新测试:

  • GbXmlTest(8 个):build/parse Keepalive、Catalog query、entity unescape、escape special chars、未知 CmdType 拒、case-insensitive lookup
  • GbMessagesTest(3 个):完整 SIP encode→parse→XML parse roundtrip、Catalog query、SN 单调

验证

mvn -B verify → 10 modules SUCCESS, 169 tests
  sip-message:        10
  sip-codec:          69
  sip-transport-nio:   7
  sip-transaction:    18
  sip-dialog:          5
  sip-ua:             12
  sip-gb28181:        11 ← 新增
  compliance:         34

工程化细节

模块名 com.sip.gb28181 末尾有数字,JPMS 默认 -Xlint:module 会警告"avoid terminal digits"。该模块本地用 -Xlint:all,-module 抑制 — GB28181 是国标编号,命名不可妥协。其他模块继续严格 lint。

Open in Web Open in Cursor 

新模块 sip-gb28181(第 10 个模块)
- GbCommand 枚举:覆盖 10 个标准 CmdType
  Keepalive / Catalog / DeviceInfo / DeviceStatus / DeviceControl /
  DeviceConfig / Alarm / MobilePosition / RecordInfo / Broadcast
  · of(wireName) 大小写不敏感、未知抛 IllegalArgumentException

- GbXmlBuilder:手写 XML 构造器
  · envelope(rootElement).text(name, value).build()
  · 自动 XML declaration + UTF-8
  · escape: < > & " '

- GbXmlParser:手写 XML 解析器(针对 GB28181 扁平结构调优)
  · 接受 root + 子元素的 name/text 对
  · 处理 declaration、self-closing、entity 反转义(含 numeric &#x...)
  · 不支持嵌套/属性/命名空间(GB28181 用不到,避免拉 JAXB)

- GbMessages:常用消息建造
  · keepaliveXml / catalogQueryXml / deviceInfoQueryXml / deviceStatusQueryXml
  · manscdpMessage:把 XML body 包到 SIP MESSAGE 请求里
    · Content-Type: Application/MANSCDP+xml
    · Via 带 rport、User-Agent 等
  · 单调 SN 序列号生成器

测试(11 个)
- GbXmlTest(8 个):build/parse keepalive、Catalog query、unescape entities、
  escape special chars、未知 CmdType 拒、case-insensitive lookup
- GbMessagesTest(3 个):manscdpMessage SIP encode→parse→XML parse 全闭环、
  Catalog query roundtrip、SN 单调

模块用 -Xlint:-module 局部抑制 'terminal digits in module name' 警告
('gb28181' 是国标编号,命名不可妥协)

mvn verify:10 模块 SUCCESS。总 169 tests。

Co-authored-by: li xuanqun <793005378@qq.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants