Skip to content

Phase 2d:SipUriParser 把 OpaqueUri 升级为 SipUri - #6

Draft
lixuanqun wants to merge 1 commit into
cursor/sip-encoder-3c36from
cursor/sip-uri-parser-3c36
Draft

Phase 2d:SipUriParser 把 OpaqueUri 升级为 SipUri#6
lixuanqun wants to merge 1 commit into
cursor/sip-encoder-3c36from
cursor/sip-uri-parser-3c36

Conversation

@lixuanqun

Copy link
Copy Markdown
Owner

概述

把 Request-URI 从 OpaqueUri 升级到 typed SipUri,让 user / password / host / port / params / headers / IPv6 reference 全部按 RFC 3261 §19.1.1 解析出来。

🔗 stacked on PR #5

实装

SipUriParser

处理:

  • sip: / sips: scheme(其他 scheme 仍回退 OpaqueUri)
  • userinfo = user[:password]@
  • hostport = host[:port]
  • IPv6 reference: [2001:db8::1]:5060
  • URI parameters: ;name=value;name2(值为空时只存 key)
  • URI headers: ?key=value&key2=value2
  • 用户名中的分号正确归入 user(关键:RFC 4475 §3.1.1.9 semiuri 测试 sip:user;par=u%40example.net@example.com

SipParser.parseUriBestEffort() 切换到新解析器。

测试

新增 SipUriParserTest 16 个单测:

  • 基本 host / sips / user / user+password+port
  • params / headers
  • IPv6(含/不含端口)
  • 非 sip scheme 回退 OpaqueUri
  • parse → asWire → parse roundtrip
  • 拒绝场景:空 host / 无效 port / 不完整 IPv6 / 空输入 / 缺 scheme

合规模块的全 6 个 accept fixture 仍 roundtrip 通过(SipUri.asWire() 重建 wire 形式与原始一致)。

验证

mvn -B verify → 49 tests, 0 failures
  sip-message: 10
  sip-codec:   29 (parser 8 + encoder 5 + URI 16)
  compliance:  33
Open in Web Open in Cursor 

SipUriParser 处理 RFC 3261 §19.1.1 + RFC 3986 §3.2.2:
- sip: / sips: scheme(其它 scheme 仍回退 OpaqueUri)
- userinfo: user[:password]@
- hostport: host[:port]
- IPv6 reference: [::1]:5060
- URI parameters: ;name=value;name2
- URI headers: ?key=value&key2=value2
- 用户名中的分号正确归入 user(如 RFC 4475 semiuri 用例)

SipParser 切换 Request-URI 解析路径
- OpaqueUri 不再是默认;只有非 sip/sips scheme 才回退
- 全 6 个 accept fixture 仍 roundtrip 通过(SipUri.asWire 完全重建)

新增 SipUriParserTest(16 个单测)覆盖:
- 基本 host / sips / user / user+password+port
- params / headers
- IPv6 reference(含/不含端口)
- 非 sip scheme 回退到 OpaqueUri
- roundtrip via asWire
- 拒绝:空 host / 无效 port / 不完整 IPv6 / 空输入 / 缺 scheme

mvn verify:9 模块 SUCCESS,49 tests(+16 URI 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