zoukankan      html  css  js  c++  java
  • sip学习

    INVITE:

    INVITE 方法被用来建立UA之间的media会话。在电话来说,类似于在ISDN上设置消息或是在ISUP上初始化地址消息。INVITE请求的响应总是发送一个ACK方法。

     INVITE通常有一个包含呼叫者的media 信息的消息体。消息体通常包含其他的会话信息,比如Qos或安全信息,如果INVITE不包含media信息,ACK中包含UAC的媒体信息。如果ACK中包含的media信息不可以接受,被调用方发送BYE来取消这个会话。不可以使用CANNEL是因为会话已经建立咯。INVITE成功以后,就在两个UA之间建立了一个对话,直到两者之一发送BYE来结束这个会话。

      UAC发起INVITE建立一个对话,同时在这次call的持续过程中为其分配了全局唯一的Call-ID,同时CSeq被初始化,对于相同的Call-ID的新请求增加CSeq。To和From字段分别定位于远程和本地地址。INVITE中From字段中包含tag,在任意回应中UAS在To中也包含tag。例如:在对INVITE的200OK回应中,To包含tag。在ACK中二者都有tag,两个tag和Call-ID唯一确定了一个dialog。

    一个INVITE发往同一个Dialog的叫做re-INVITE,re-INVITE被用来改变会话的特性,或是刷新对话的状态。CSeq在re-INVITE中被增加,所以可以用re-INVITE来区分两者。

      如果re-INVITE被拒绝或是失败,会话仍然继续。直到初始INVITE的最终响应被接受,UAC不需要再发送re-INVITE请求。而UPDATE请求可以在这个时候被发送。在UA同时发送re-INVITE给对方的情况。这种情况在Retry-After中被处理。

      例子:

    INVITE sip:411@salzburg.at;user=phone SIP/2.0
         Via: SIP/2.0/UDP salzburg.edu.at:5060;branch=z9hG4bK1d32hr4
         Max-Forwards:70
         To: <sip:411@salzburg.at;user=phone>
         From: Christian Doppler <sip:c.doppler@salzburg.edu.at>
           ;tag=817234
         Call-ID: 12-45-A5-46-F5@salzburg.edu.at
         CSeq: 1 INVITE
         Subject: Train Timetables
         Contact: sip:c.doppler@salzburg.edu.at
         Content-Type: application/sdp
         Content-Length: 151

         v=0
         o=doppler 2890842326 2890844532 IN IP4 salzburg.edu.at
         s=Phone Call
         c=IN IP4 50.61.72.83
         t=0 0
         m=audio 49172 RTP/AVP 0
         a=rtpmap:0 PCMU/8000

    NOTIFY:
     NOTIFY 方法是UA用来传达某一个特殊事件发生的信息的.NOTIFY总是在订阅者和通知者之间的SUBSCRIPTION存在的时候在一个会话之内被发送的.然而,订阅不一定要通过SUBSCRIBE来建立的,比如REFER也可以建立隐式订阅.
     NOTIFY请求包含一个EVENT字段用来标示package.一个Subscription-State字段来标示当前的订阅状态.它们可以是active,pending,terminated三者的其中之一。
     例如:
         NOTIFY sip:tyoung@parlour.elasticity.co.uk SIP/2.0
         Via SIP/2.0/UDP cartouche.rosettastone.org:5060
          ;branch=z9hG4bK3841323
         Max-Forwards: 70
         To: Thomas Young <sip:tyoung@elasticity.co.uk>;tag=1814
         From: <sip:ptolemy@rosettastone.org>;tag=5363956k
         Call-ID: 452k59252058dkfj34924lk34
         CSeq: 3 NOTIFY
         Contact: <sip:Ptolemy@cartouche.rosettastone.org>
         Event: dialog
         Subscription-State: active
         Allow-Events: dialog
         Content-Type: application/xml+dialog
         Content-Length: ...

    MESSAGE

         MESSAGE方法被用来传输IM。实际的消息内容作为MIME附件的形式放在消息体中,所有的支持MESSAGE方法的UA一定支持plain/text格式,他们也支持message/cpim,text/html等。

        一个MEASSAGE请求可以在Request-URI中使用im URI样式。尽管一个client试图解析一个sip或是 sips。

       MESSAGE  在SIP中也可以用完全模拟的方式来实现。INVITE可以建立一个会话,然后在SDP中描述instant message.

    例如:

         MESSAGE sip:editor@rcs.org SIP/2.0
         Via SIP/2.0/UDP lab.mendeleev.org:5060;branch=z9hG4bK3
         Max-Forwards: 70
         To: <editor@rcs.org>
         From: "D. I. Mendeleev" <dmitry@mendeleev.org>;tag=1865
         Call-ID: 93847197172049343
         CSeq: 5634 MESSAGE
         Subject: First Row
         Contact: <sip:dmitry@lab.mendeleev.org>
         Content-Type: text/plain
         Content-Length: 5
    INFO

        INFO方法被UA用来发送呼叫信令信息到另一个UA,来建立一个media session.她和re-INVITE的不同之处在于它没有改变呼叫的media特性。这个请求是end-to-end的。一个代理总是转发INFO请求,一直到UAS检查是否对话有效为止。对未知对话的INFO请求将会导致481 Transaction/Dialog Does not Exist的错误。

        INFO请求通常包括消息体,其内容可以是媒体消息,midcall 事件,其他因素。

     例如:

         INFO sip:poynting@mason.edu.uk SIP/2.0
         Via: SIP/2.0/UDP cavendish.kings.cambridge.edu.uk
          ;branch=z9hG4bK24555
         Max-Forwards: 70
         To: John Poynting <sip:nting@mason.edu.uk> ;tag=3432
         From: J.C. Maxwell <sip:james.maxwell@kings.cambridge.edu.uk>
          ;tag=432485820183
         Call-ID: 18437@cavendish.kings.cambridge.edu.uk
         CSeq: 6 INFO
         Content-Type: message/isup
         Content-Length: 16

  • 相关阅读:
    每日日报46
    每日日报45
    每日日报44
    每日日报43
    每日日报42
    每日日报41
    每日日报40
    每日日报之一周总结
    每日日报
    每日日报
  • 原文地址:https://www.cnblogs.com/rosekin/p/2348743.html
Copyright © 2011-2022 走看看