[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Sip] Bug? Matching rules of Server Transaction



sipHi all,

  When I fulfill "Call pickup" service , I meet a problem about Server Transaction matching rules. As RFC3261 says in section 17.2.3:
<quote>
   The branch parameter in the topmost Via header field of the request
   is examined.  If it is present and begins with the magic cookie
   "z9hG4bK", the request was generated by a client transaction
   compliant to this specification.  Therefore, the branch parameter
   will be unique across all transactions sent by that client.  The
   request matches a transaction if:

      1. the branch parameter in the request is equal to the one in the
         top Via header field of the request that created the
         transaction, and

      2. the sent-by value in the top Via of the request is equal to the
         one in the request that created the transaction, and

      3. the method of the request matches the one that created the
         transaction, except for ACK, where the method of the request
         that created the transaction is INVITE.

   This matching rule applies to both INVITE and non-INVITE transactions
   alike.
</quote>

   So, if the notifier notifies subscriber the resources state in two NOTIFY messages, as below:

             notifier                      subscriber
                |        ............          |
                |-------NOTIFY (F1)----------->|
                |<------200 OK (F2)------------|
                |                              |  the interval is less Timer J, J does not fire yet.
                |                              |
                |-------NOTIFY (F3)----------->|
                |<------200 OK (F4)------------|
                |                              |

  the message is :
<NOTIFY_F1>

 NOTIFY sip:bob@biloxi.example.com SIP/2.0
   Via: SIP/2.0/UDP Bob.biloxi.example.com:5060;branch=z9hG4bK74bf
   Max-Forwards: 70
   From: Bob <sip:bob@biloxi.example.com>;tag=31451098
   To: Carol <sip:carol@biloxi.example.com>;tag=8675309
   Call-ID: rt4353gs2egg@pc.biloxi.example.com
   CSeq: 1 NOTIFY
   Contact: <sip:carol@Bob.biloxi.example.com>
   Event: dialog
   Subscription-State: active;expires=3600
   Content-Type: application/dialog-info+xml
   Content-Length: ...

</NOTIFY_F1>

<NOTIFY_F2>

   NOTIFY sip:bob@biloxi.example.com SIP/2.0
   Via: SIP/2.0/UDP Bob.biloxi.example.com:5060;branch=z9hG4bK74bf
   Max-Forwards: 70
   From: Bob <sip:bob@biloxi.example.com>;tag=31451098
   To: Carol <sip:carol@biloxi.example.com>;tag=8675309
   Call-ID: rt4353gs2egg@pc.biloxi.example.com
   CSeq: 2 NOTIFY
   Contact: <sip:carol@Bob.biloxi.example.com>
   Event: dialog
   Subscription-State: active;expires=3600
   Content-Type: application/dialog-info+xml
   Content-Length: ...

</NOTIFY_F2>

  Notice that the two NOTIFY have the SAME branch & the magic cookie "z9hG4bK", using the matching rules in 17.2.3, all the three rules MATCH! So I can judge F3 belongs to the same transaction which created by F1, because timer J does not fire, and F2 is sent to response F1 , as per 17.2.2 of RFC3261, when F3 comes, I will think F3 is the retransmision of F2!
But they are not the same indeed: different CSeq and report different resource's state!

  Maybe I missing somthing, but I'm really puzzled .

  Thanks a lot to clarify!



_______________________________________________
Sip mailing list  https://www1.ietf.org/mailman/listinfo/sip
This list is for NEW development of the core SIP Protocol
Use sip-implementors@cs.columbia.edu for questions on current sip
Use sipping@ietf.org for new developments on the application of sip