我正在用 Python 开发一个能够管理 SIP 事务的应用程序。 我不需要接听或发送/接收媒体,我只想跟踪来电并发送 INIVTE 并在之后取消(这非常简单)。 我成功编写了代码来获取传入的 SIP 消息并发送响应,但消息内容有问题。 例如:我收到一个 INVITE,我想用 TRYING 来回答。应用程序拦截 INVITE,读取消息内容并发送 TRYING,但服务器无法识别与 INVITE 相关的 TRYING,并继续发送 INVITE。
“TRYING”消息有什么问题?
消息:
Session Initiation Protocol (INVITE)
Request-Line: INVITE sip:[email protected]:5060 SIP/2.0
Message Header
Via: SIP/2.0/UDP 79.98.45.133:5060;branch=z9hG4bK2f7cb45b;rport
Max-Forwards: 70
From: <sip:[email protected]>;tag=as35f49270
To: <sip:[email protected]:5060>
Contact: <sip:[email protected]:5060>
Call-ID: [email protected]:5060
[Generated Call-ID: [email protected]:5060]
CSeq: 102 INVITE
User-Agent: MOR Softswitch
Date: Mon, 30 Sep 2024 14:18:02 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
Supported: replaces, timer
Content-Type: application/sdp
Content-Length: 361
Message Body
No. Time Source Destination Protocol Length Info
33 6.391889 192.168.178.83 79.98.45.133 SIP 324 Status: 100 Trying |
Frame 33: 324 bytes on wire (2592 bits), 324 bytes captured (2592 bits)
Ethernet II, Src: HewlettP_cc:df:08 (68:b5:99:cc:df:08), Dst: AVMAudio_bb:b4:a0 (38:10:d5:bb:b4:a0)
Internet Protocol Version 4, Src: 192.168.178.83, Dst: 79.98.45.133
User Datagram Protocol, Src Port: 38119, Dst Port: 5060
Session Initiation Protocol (100)
Status-Line: SIP/2.0 100 Trying
Message Header
Via: SIP/2.0/UDP 79.98.45.133:5060; branch=z9hG4bK2f7cb45b
From: <sip:[email protected]>; tag=as35f49270
To: <sip:[email protected]:5060>
Call-ID: 0e23cffb0fdc0fbe19949dd042d668ac
[Generated Call-ID: 0e23cffb0fdc0fbe19949dd042d668ac]
Cseq: 102 INVITE
User-Agent: PythonSIPClient
Content-Length: 0
您的代码应该从原始 INVITE 中复制“Call-ID”标头的值并将其放入 TRYING 中。根据提供的 pcap 片段,它会跳过该值的一部分并在其之前添加额外的空间。 “CSeq”标头名称也有错误:
Call-ID: [email protected]:5060
Call-ID: 0e23cffb0fdc0fbe19949dd042d668ac
CSeq: 102 INVITE
Cseq: 102 INVITE