【问题标题】:SIP: how to know, for which REFER the NOTIFY came?SIP:怎么知道,REFER 是针对哪个来的?
【发布时间】:2012-03-21 10:56:32
【问题描述】:

假设,我们有以下对话框:

Agent A                  Agent B
  |                        |
  |   F1 REFER             |
  |----------------------->|
  |        F2 202 Accepted |
  |<-----------------------|
  |        F3 NOTIFY       |
  |<-----------------------|
  |  F4 200 OK             |
  |----------------------->|
  |                        |
  |                        |
  |                        |------->
  |                        |  (whatever)
  |                        |<------
  |                        |
  |         F5 NOTIFY      |
  |<-----------------------|
  |   F6 200 OK            |
  |----------------------->|
  |                        |
  |                        |
  |                        |
  |   F7 REFER             |
  |----------------------->|
  |        F8 202 Accepted |
  |<-----------------------|
  |        F9 NOTIFY       |
  |<-----------------------|
  |  F10 200 OK            |
  |----------------------->|
  |                        |------->
  |                        |  (something different)
  |                        |<------
  |                        |
  |         F11 NOTIFY     |
  |<-----------------------|
  |   F12 200 OK           |
  |----------------------->|
  |                        |
  |                        |

有两个 REFER(取自 RFC 3515

我收到每个 REFER 的 NOTIFY 请求,如下所示:

NOTIFY sip:192.168.1.39:5062;transport=udp SIP/2.0
Via: SIP/2.0/UDP 192.168.1.249;rport=5060;branch=z9hG4bKyZ09F8gtB6rtQ;received=192.168.1.249
Max-Forwards: 70
From: "Extension 1200" <sip:1200@192.168.1.249>;tag=7ytSSBvaBeN5H
To: <sip:1201@192.168.1.39:5062>;tag=25b9a9ba-f249-4e21-a25a-c2ed578c5101
Call-ID: f94d6be3-edfc-122f-ebb0-000c29da7e39
CSeq: 25832274 NOTIFY
Contact: <sip:mod_sofia@192.168.1.249:5060>
User-Agent: FreeSWITCH-mod_sofia/1.0.head-git-5e4a514 2012-03-10 22-56-29 -0500
Allow: INVITE,ACK,BYE,CANCEL,OPTIONS,MESSAGE,UPDATE,INFO,REGISTER,REFER,NOTIFY,PUBLISH,SUBSCRIBE
Supported: timer,precondition,path,replaces
Event: refer;id=1
Allow-Events: talk,hold,presence,dialog,line-seize,call-info,sla,include-session-description,presence.winfo,message-summary,refer
Subscription-State: terminated;reason=noresource
Content-Type: message/sipfrag;version=2.0
Content-Length: 16

SIP/2.0 200 OK

通知我,REFER 成功。

问题是:在NOTIFY中,我怎么知道它是针对哪个REFER?

【问题讨论】:

    标签: sip notify refer


    【解决方案1】:

    来自同一个 RFC:

    2.4.6 对话框中的多个 REFER 请求

    REFER 创建一个共享对话框的隐式订阅 REFER 请求中的标识符。如果发出多个 REFER 在同一个对话框中(第二次尝试转接 例如),对话标识符没有提供足够的信息来 将生成的 NOTIFY 与正确的 REFER 相关联。

    因此,对于第二个和后续的 REFER 请求,UA 在 给定对话框,它必须在事件标头中包含一个 id 参数 [2] 每个 NOTIFY 的字段包含序列号(从 与此 NOTIFY 相关联的 REFER 的 CSeq 头字段值) 和。此 id 参数可能包含在第一个通知中 REFER UA 在给定的对话中收到。发送一个 SUBSCRIBE 来刷新 或终止此订阅必须包含此 id 参数。

    【讨论】:

      猜你喜欢
      • 2017-03-14
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-27
      • 2019-02-11
      相关资源
      最近更新 更多