Home eBook Buy SIPKnowledge Hall Of Fame (Top 1%) FAQ About Contact
iLearn iCertify iLAB 3GPP IMS Specifications SIP RFCs IMS? SIP? DEMO
SIP Feature/Topic Of The Month SIP Glossary VoIP Glossary (3GPP) IMS Glossary
Test Your SIP Knowledge Test Your IMS Knowledge Test Your VoIP Knowledge SIP Books "The" SIP RFC (3261) - Annotated

 

Back to main FAQ

 

 

 

Q&A Triggered by the SIP RFC 3261 clarifier/navigator tool 

 

 

 

--- Questions ---

 

If two users logon to a SIP phone application on a host and initiate dialogues with two different UASs using INVITE (BTW, are there any other Methods defined in the standard-track RFCs), the domain part of the contact address in both the invites will remain the same. How does re-INVITEs initiated by the UASs get distributed to the users? Is it left to the application to take action?

 

Who decides the policy (serial search depending upon the q values or parallel search) for various entries returned by the location service?

 

Why does the dialogues not get established by the CALL-ID, TO-tag and FROM-tag in OPTIONS method? As per RFC dialogue is only established by the INVITE method.

 

Page 24 - Location Service - "It contains a list of bindings of address-of-record keys to zero or more contact addresses." When the register Request is sent to the registrar with Expires header field value as 0 and contact as * (or when all the contacts expire) , does it empty the contacts list for the AOR or it removes the AOR entry from its database?

 

If a User agent is configured with an outbound proxy, is it required to add the Route header with the value equal to the its hostname or IP address when sending a request?

 

page 39 - 8.1.1.2 - "As an example, a user in an airport might log in and send requests through an outbound proxy in the airport. ....." In the example I think it is assumed that the user is using a public PC. If it were using his own device, that device outbound proxy on that device would be configured as a proxy in his home network. Please comment.

 

8.1.1.3 - Is it not possible for a user to configure his From header field to a fake value?

 

Since both Branch-Id and Max-Forwards is used to detect the loop, which field is checked first? If loop can be detected with Branch-Id field, why is Max-Forwarded field required and that too as a mandatory field?

 

Page 43 - 8.1.1.8 - "That is, the Contact header field value contains the URI at which the UA would like to receive requests, and this URI MUST be valid even if used in subsequent requests outside of any dialogs." If a dialogue is setup in which the contact header field is exchanged, then can the contact header field be used in a next dialogue using the same contact header field to reach the UAC/UAS directly without going through the proxies?

 

Page 43 - 8.1.1.8 - follow up - In your answer you said that RFC 3261 enables caching the contact info (also) for future dialogs - How do current implementation go about that? Also, how long is the conatct cached for?

 

Page 45 - third paragraph - "In particular, a UAC configured with an outbound proxy SHOULD attempt to send the request to the location indicated in the first Route header field value instead of adopting the policy of sending all messages to the outbound proxy." I find it contradicting to a previous statement saying that all the requests should be sent using the outbound proxy. Please clarify.

 

8.2.2 - I am not able to understand how the merged requests are detected. Can you please explain it to me in a little easier way.

 

8.2.3 - "If there are any bodies whose type (indicated by the Content-Type), language (indicated by the Content-Language) or encoding  (indicated by the Content- ncoding) are not understood, and that body part is not optional (as indicated by the Content-Disposition header field), the UAS MUST reject the request with a 415 (Unsupported Media Type) response." If the body part is optional, how should it be treated? Should it be ignored?

 

8.2.6.2 - "If a request contained a To tag in the request, the To header field in the response MUST equal that of the request. " In what circumstances?

 

The SIP RFC says that the Call-id MUST be globally unique in time and space. What does it mean? Does it mean that the Call-id being used must not be used in future requests, and that the same Call-id should not be generated by any other user?

 

Are there any other methods specified in the standard-tracks, which can initiate a dialogue?

 

Page 82 - "If the remote sequence number is empty, it MUST be set to the value of the sequence number in the CSeq header field value in the request...." - In what conditions will the remote sequence number be empty? remote sequence number would have been set to the integer in CSeq header field in the previous request.

 

Page 87 - Third Paragraph - "If the offer in the 2xx response is not acceptable, the UAC core MUST generate a valid answer in the ACK and then send a BYE immediately ." Page 94 - Second Paragraph - The caller's UA MAY send a BYE for either confirmed or early dialogs, and the callee's UA MAY send a BYE on confirmed dialogs, but MUST NOT send a BYE on early dialogs. I find these two statements contradicting each other. The statement on page 87 says that the caller can send a BYE only after sending the ACK. But the statement on page 94 says that the caller can send a BYE even before the dialogue is confirmed. Please explain this. Does BYE not require an SDP body which would close the session?

 

Page 113 - First paragraph - "If the selected response is a 401 (Unauthorized) or 407 (Proxy Authentication Required), the proxy MUST collect any WWW-Authenticate and Proxy-Authenticate header field values from all other 401 (Unauthorized) and 407 (Proxy Authentication Required) responses received so far in this response context and add them to this response without modification before forwarding." For aggregating the 401 and 407 responses, which response will be selected by the proxy and on what basis? Also, will 401 response be able to accommodate Proxy-Authenticate header field of 407 and vice-versa?

 

Page 113 - Fourth Paragraph - "If If the proxy received the request over TLS, and sent it out over a non-TLS connection, the proxy MUST rewrite the URI in the Record-Route header field to be a SIPS URI." Page 104 - First Paragraph - "In a similar fashion, a proxy that receives a request over TLS, but generates a request without a SIPS URI in the Request-URI or topmost Route header field value (after the post processing of bullet 6), MUST insert a Record-Route header field that is not a SIPS URI." From the statement on page 113, it seems that the record-route header contains SIPS or non-SIPS depends upon whether it RECEIVED the request on SIPS or non-SIPS. Where as the from the statement on page 104, it appears that record-route header contains SIPS or non-SIPS URI depends upon whether the request was SENT on SIPS or non-SIPS. Please explain these two contradicting statements.

 

Page 124 - "For each final response that is received at the client transaction, the client transaction sends an ACK, ...". I think this statements is for non-2xx final responses received at the client transaction, because for 2xx responses, the ACK is generated by the TU. Please clarify. Also, does the INVITE transaction also take care of generating the ACK for non-2xx final responses? This is not explicitly mentioned in the RFC, but there are many such instances mentioned in RFC where ACK is generated by the INVITE Client transactions. Please clarify.

 

Since Timer C is started by Transaction Users, is the timer C also used in UAs and reset at the receipt of provisional response?

 

Both RFCs 3261 and 3262 published in June 2002. But RFC 3261 does not talk about acknowledging provisional responses and 3262 is only about acknowledging the provisional responses. Can you please explain why this contradiction is there?

 

17.1.2.1 - "If a provisional response is received, retransmissions continue for unreliable transports, but at an interval of T2". But Section 8.2.6.1 of RFC says that provisional responses are not generated for non-INVITE Requests. "One largely non-method-specific guideline for the generation of responses is that UASs SHOULD NOT issue a provisional response for a non-INVITE request.

 

Page 145 - "If there is a match, the response MUST be passed to that transaction. Otherwise, the response MUST be passed to the core (whether it be stateless proxy, stateful proxy, or UA) for further processing. Handling of these "stray" responses is dependent on the core (a proxy will forward them, while a UA will discard, for example) " Why would the client discard the response? In case of 200 response received for a forked request, the client would have to process it.

 

Page 193 - Third Paragraph - "UACs creating an ACK message will duplicate all of the Authorization and Proxy-Authorization header field values that appeared in the INVITE to which the ACK corresponds. Servers MUST NOT attempt to challenge an ACK." RFC 3665 - Page 22 - ACK in F15 does not contain an Authentication Parameters where as INVITE in F4 was sent with Authentication Parameters after it was challenged. Is it optional to send Authentication parameters in ACK because Servers will not challenge it?

 

Page 195 - Seventh Paragraph - "If a UA receives a Proxy-Authenticate header field value in a 401/407 response to a request with a particular Call-ID,...". Same as question 6. Which Response will be selected? can 401 have Proxy-Authenticate header field?

 

Page 80 - Third Paragraph - "as discussed in Section 12.2.2, a Contact header field in a target refresh request updates the remote target URI. This allows a UA to provide a new contact address, should its address changes during the duration of the dialog." - Can you please elaborate?

 

17.1.1 - INVITE transaction - Say the UAC receives 1xx response to the INVITE. As a result it moves to the proceeding state. Now 200 does not come for a long time. Does the UAC get hung (and the user waits forever)?

 

--- Answers ---

 

If two users logon to a SIP phone application on a host and initiate dialogues with two different UASs using INVITE (BTW, are there any other Methods defined in the standard-track RFCs), the domain part of the contact address in both the invites will remain the same. How does re-INVITEs initiated by the UASs get distributed to the users? Is it left to the application to take action?

 

That's exactly the purpose of both the Call-ID and the From tag to tell two call instances from one another on the calling device. Pls go back to any of our Invite related call flows and browse both the Call-ID and From Tag elaborations by clicking on the linked text. Re-invites from the called endpoint will use the info in the original Contact header as the target, and will swap the values of the from tag and to tag! Go back please to the direct Invite example and see how that happens when B Byes A. (Btw, we were missing the To Tag in the Re-invite (A to B) we added it; This however not the case you were looking for)

 

Who decides the policy (serial search depending upon the q values or parallel search) for various entries returned by the location service?

 

It is totally at the discrete of the implementation and the service represented by it!

 

Why does the dialogues not get established by the CALL-ID, TO-tag and FROM-tag in OPTIONS method? As per RFC dialogue is only established by INVITE method.

 

The reason is that OPTIONS was meant to be used as a standalone out-of-dialog query-response method. As Opposed to INVITE, which is expected to open a dialog, which is to remain open as long as RTP is flowing.

 

Page 24 - Location Service - "It contains a list of bindings of address-of-record keys to zero or more contact addresses." When the register Request is sent to the registrar with Expires header field value as 0 and contact as * (or when all the contacts expire) , does it empty the contacts list for the AOR or it removes the AOR entry from its database?

 

This action is again at the discrete of the registrar application. Keeping the empty entry might save a new creation of the entry when/if there is a new registration of that user. This comes however at the expense of efficient use of memory resources.

 

If a User agent is configured with an outbound proxy, is it required to add the Route header with the value equal to the its hostname or IP address when sending a request?

 

Yes. Based on section 12.2.1.1 the endpoint must place the SIP URI, which contains the IP addr or FQDN of the outbound proxy in a Route header. This may look like a useless info for the outbound proxy. However it was mandated to comply with the proxy rules of 16.4. It is true that based on the way 16.4 is written ("If the first value in the Route header field indicates this proxy, the proxy MUST remove that value from the request.") the outbound proxy is not expected to get over excited if Route header is not present.

 

page 39 - 8.1.1.2 - "As an example, a user in an airport might log in and send requests through an outbound proxy in the airport. ....." In the
example I think it is assumed that the user is using a public PC. If it were using his own device, that device outbound proxy on that device would be configured as a proxy in his home network. Please comment.

 

Good point. However even when you use your own soft/hard SIP phone it may decide to override the configured outbound proxy if it gets an IP/FQDN of a local outbound proxy via DHCP (RFC 3361).

 

8.1.1.3 - Is it not possible for a user to configure his From header field to a fake value?

 

Good point. From spoofing is possible in SIP just like it is possible (and often used) with email. There are special RFCs (e.g. 3323, 3325), which discuss this issue in a great detail and attempt to provide solution via authentication and trust domains.

 

Since both Branch-Id and Max-Forwards is used to detect the loop, which field is checked first? If loop can be detected with Branch-Id field, why is Max-Forwarded field required and that too as a mandatory field?

 

According 3261 16.3 Max-Forwards check takes first first. In our minds this is a double-verification mechanism for loop situations. Even that in theory one can claim that reaching max-forwards situation still doesn't necessarily mean loop.. Practically in our minds this is loop, and btw we believe the value 70 is way too high.

 

Page 43 - 8.1.1.8 - "That is, the Contact header field value contains the URI at which the UA would like to receive requests, and this URI MUST be valid even if used in subsequent requests outside of any dialogs." If a dialogue is setup in which the contact header field is exchanged, then can the contact header field be used in a next dialogue using the same contact header field to reach the UAC/UAS directly without going through the proxies?

 

Yes. There was a big argument over it in IETF. In RFC 2543 this was still limited to the same dialog. Only in 3261 this got enhanced beyond the current dialog. People realized that this was more realistic even if not bullet proof.

 

Page 43 - 8.1.1.8 follow up - In your answer you said that RFC 3261 enables caching the contact info (also) for future dialogs - How do current implementation go about that? Also, how long is the conatct cached for?

 

In most of the existing SIP networks this caching does not really come into play, as they are not peer to peer, but there is usually a network in between the
endpoints. It is basically a contradiction to the registrar idea. Endpoints might be in IP private domains having time-limited reachable addresses. On top of it IP
addresses nowadays have typically dynamic nature; thus this sip capability does not seem very practical.

 

Page 45 - third paragraph - "In particular, a UAC configured with an outbound proxy SHOULD attempt to send the request to the location indicated in the first Route header field value instead of adopting the policy of sending all messages to the outbound proxy." I find it contradicting to a previous statement saying that all the requests should be sent using the outbound proxy. Please clarify.

 

Not really. The standard wants the UA to use outbound proxy if one is configured. But this is provided there is no Route header present. So basically the standard tries to distinguish a first request in a dialog from the subsequent ones. For the first one the outbound proxy shall be used as you do not expect to have Route hdr present, while for subsequent requests you may have Route present due to Record-Routing performed by some of the proxies. You can regard this is priority mechanism. I.e. Route is prioritized over outbound proxy.

 

8.2.2 - I am not able to understand how the merged requests are detected. Can you please explain it to me in a little easier way.

 

Think about a CANCEL sent 3 seconds after an INVITE was sent. The UAC wants the UAS to realize that the INVITE is not valid any more. This is a good situation of two requests belong to the same transaction. Now if there was one INVITE after another without any final response in between this would be some kind of a loop, as the same request should NOT be sent twice within the same transaction. The rest (see 17.2.3) are just the rules how to compare the first request to the second in order to realize what case out of the two above is at hand.

 

8.2.3 - "If there are any bodies whose type (indicated by the Content-Type), language (indicated by the Content-Language) or encoding  (indicated by the Content-Encoding) are not understood, and that body part is not optional (as indicated by the Content-Disposition header field), the UAS MUST reject the request with a 415 (Unsupported Media Type) response." If the body part is optional, how should it be treated? Should it be ignored?

 

In general Yes. But this is indeed at the discretion of the implementation. If for example the body contains picture of the caller and the UAS insists of using this is as a security mechanism for the callee to identify the caller (before accepting the call), and say something went wrong with its format (or perhaps some unknown file format is used) then even if the UAC did not mark the payload as mandatory, still the UAS may choose to reject.

 

8.2.6.2 - "If a request contained a To tag in the request, the To header field in the response MUST equal that of the request. " In what circumstances?

 

This tag match happens when the UAS returned already 180 or 200. Now if a subsequent request contains the tag it means the request was sent to the particular UAS instance, which created that tag. Think about forking case!

 

The SIP RFC says that the Call-id MUST be globally unique in time and space. What does it mean? Does it mean that the Call-id being used must not be used in future requests, and that the same Call-id should not be generated by any other user?

 

This is correct. Call-id is the key identifier of a media session. This is true not only when the session is active, but also off line. For example it is used as one of
the key identifiers of billing records, call logs etc Thus to avoid "record collisions" its uniqueness over both time and space is important.

 

Are there any other methods specified in the standard-tracks, which can initiate a dialogue?

 

Yes, the SUBSCRIBE method. See RFC 3265.

 

Page 82 - "If the remote sequence number is empty, it MUST be set to the value of the sequence number in the CSeq header field value in the request..." - In what conditions will the remote sequence number be empty? remote sequence number would have been set to the integer in CSeq header field in the previous request.

 

The RFC just attempts to cover all possible cases. In the normal realistic case the remote sequence number would have been set to the integer in CSeq header field in the previous request + 1. Empty CSeq shouldn't really happen and shows some state error on the sending side. SIP tries to demonstrate recoverability here, but again we do not see such a case/condition as a common one.

 

Page 87 - Third Paragraph - "If the offer in the 2xx response is not acceptable, the UAC core MUST generate a valid answer in the ACK and then send a BYE immediately ." Page 94 - Second Paragraph - The caller's UA MAY send a BYE for either confirmed or early dialogs, and the callee's UA MAY send a BYE on confirmed dialogs, but MUST NOT send a BYE on early dialogs. I find these two statements contradicting each other. The statement on page 87 says that the caller can send a BYE only after sending the ACK. But the statement on page 94 says that the caller can send a BYE even before the dialogue is confirmed. Please explain this.

 

There is no contradiction, as page 87 does not say BYE needs to be sent by the caller only for confirmed dialogs. It only addresses the special condition in which a 2XX was sent but is not acceptable (for example the callee can not support the video stream of an offer), and instructs the UAC to first ACK the 2XX, in order to avoid re-transmission of the 2XX and bring the dialog to a "healthy" state on the UAS side; then terminate it. Note that this condition entirely falls under the umbrella of confirmed dialogs. This has nothing to do with early dialog cases, which are not discussed in that section of page 87.

 

Does BYE not require an SDP body which would close the session?

 

No. Why would you want to send SDP in a BYE...? If you did what would the UAS do with that...?

 

Page 113 - First paragraph - "If the selected response is a 401 (Unauthorized) or 407 (Proxy Authentication Required), the proxy MUST collect any WWW-Authenticate and Proxy-Authenticate header field values from all other 401 (Unauthorized) and 407 (Proxy Authentication Required) responses received so far in this response context and add them to this response without modification before forwarding." For aggregating the 401 and 407 responses, which response will be selected by the proxy and on what basis? Also, will 401 response be able to accommodate Proxy-Authenticate header field of 407 and vice-versa?

 

The proxy will select 40X responses based on its app logic. A simple logic for example would be aggregating the 401 and 407 responses, which were received from forked destinations within a certain time limit. As you can see the RFC leaves this pretty open.
Yes - 401 response can accommodate Proxy-Authenticate header field of 407 and vice-versa. See Table 2 in section 20 of the RFC, which details the requests and responses within which any SIP header may be used (hint: Lookup the WWW-Authenticate and Proxy-Authenticate headers...).

 

Page 113 - Fourth Paragraph - "If If the proxy received the request over TLS, and sent it out over a non-TLS connection, the proxy MUST rewrite the URI in the Record-Route header field to be a SIPS URI." Page 104 - First Paragraph - "In a similar fashion, a proxy that receives a request over TLS, but generates a request without a SIPS URI in the Request-URI or topmost Route header field value (after the post processing of bullet 6), MUST insert a Record-Route header field that is not a SIPS URI." From the statement on page 113, it seems that the record-route header contains SIPS or non-SIPS depends upon whether it RECEIVED the request on SIPS or non-SIPS. Where as the from the statement on page 104, it appears that record-route header contains SIPS or non-SIPS URI depends upon whether the request was SENT on SIPS or non-SIPS. Please explain these two contradicting statements.

 

No contradiction. Think about who is going to use the RR (Record Route). In page 104 (Request processing) the RR will be used by the callee to set its route set! In page 113 it will be used by the caller to set its route set. Note that these two route sets would include the same elements, but in the reverse direction.
When you come from the reverse direction the transport you use may differ as the next downstream and upstream elements are differ. As a simple exercise take a look at the example in 16.12.1. The path from caller to callee is U1-P1-P2-U2, but from callee to caller it is U2-P2-P1-U1. Now let's say that secure transport (TLS) needs to be used only on the leg between U2 and P2. In the request processing (page 104) P2 would set RR to SIPS, as it knows it is to be used/consumed by U2 for subsequent requests on that dialog. However on the response direction (page 113) P2 would set RR to SI, as it knows it is to be used by U1 for subsequent requests on that dialog. Recall that in U1 to U2 direction P2 is to be approached (i.e. receives the request directly) from P1, while in the direction of U2 to U1 P2 is to receive requests directly from U2. Think about it!

 

Page 124 - "For each final response that is received at the client transaction, the client transaction sends an ACK, ...". I think this statements is for non-2xx final responses received at the client transaction, because for 2xx responses, the ACK is generated by the TU. Please clarify. Also, does the INVITE transaction also take care of generating the ACK for non-2xx final responses? This is not explicitly mentioned in the RFC, but there are many such instances mentioned in RFC where ACK is generated by the INVITE Client transactions. Please clarify.

 

Your assumption is correct. ACK for final responses, which are not 2XX, is done by the INVITE transaction, as opposed to ACK for 2XX response, which is done by the UA core. Also please note that ACK for 3XX-6xx are hop by hop, while ACK for 2XX are end to end, i.e. must be generated by the calling endpoint (as opposed to client side of mid chain proxy). The idea behind it is the significance of ACKing the 2XX (e.g. billing can start, media resources need to be allocated etc) hence making sure the core logic of the calling endpoint is aware of the call acceptance, and has confirmed that to the callee endpoint.

 

Since Timer C is started by Transaction Users, is the timer C also used in UAs and reset at the receipt of provisional response?

 

Timer C is a special one. It is only used by client side of proxies. Its purpose is to serve as a 'master timer' for stateful proxy, which may have forked, hence helping it to make dynamic decisions on the potential set of transactions created by it. The key timers which are correlated between client and server side of INVITE transaction are B and H (giving up on the transaction respectively). There is NO equivalent for timer C on the server side.
 

Both RFCs 3261 and 3262 published in June 2002. But RFC 3261 does not talk about acknowledging provisional responses and 3262 is only about acknowledging the provisional responses. Can you please explain why this contradiction is there?

 

Basically Chicken and egg situation. Back then it was decided that for clarity purpose it is better to leave it as is in 3261 (which preceded 3262) and "fix" it in
3262.

 

17.1.2.1 - "If a provisional response is received, retransmissions continue for unreliable transports, but at an interval of T2". But Section 8.2.6.1 of RFC says that provisional responses are not generated for non-INVITE Requests. "One largely non-method-specific guideline for the generation of responses is that UASs SHOULD NOT issue a provisional response for a non-INVITE request.

 

First, there is no guarantee that the guideline is going to be followed by any UAS in the market. Second, the provisional response might be 100 returned by the next hop (e.g. proxy). Recall that 100 responses are hop by hop ones.

 

Page 145 - "If there is a match, the response MUST be passed to that transaction. Otherwise, the response MUST be passed to the core (whether it be stateless proxy, stateful proxy, or UA) for further processing. Handling of these "stray" responses is dependent on the core (a proxy will forward them, while a UA will discard, for example)." Why would the client discard the response? In case of 200 response received for a forked request, the client would have to process it.

 

Good catch. Absolutely agree. UAC, which, can exchange media with multiple UAS in parallel, should pass the 2XX to the core. See our Forking Proxy example, in which Sherlock talks at the same time to both Ann and Watson. The RFC says "for example" though, so one may conclude that the authors were
referring to a simple UAC, which is either capable or configured to exchange media only with a single user at a given time.

 

Page 193 - Third Paragraph - "UACs creating an ACK message will duplicate all of the Authorization and Proxy-Authorization header field values that appeared in the INVITE to which the ACK corresponds. Servers MUST NOT attempt to challenge an ACK." RFC 3665 - Page 22 - ACK in F15 does not contain an Authentication Parameters where as INVITE in F4 was sent with Authentication Parameters after it was challenged. Is it optional to send Authentication parameters in ACK because Servers will not challenge it?

 

Good catch. Absolutely agree. In the example in RFC 3665 the UAC assumed its ACK will not get rejected by the proxy, even it does not include the credentials. In reality this may work or this may not work. Depends on the proxy security policy. As a rule sometimes in the call flow examples Alan J. et al wanted to simplify some of the things, in order to focus on some other characteristics of the particular call flow.

 

Page 195 - Seventh Paragraph - "If a UA receives a Proxy-Authenticate header field value in a 401/407 response to a request with a particular Call-ID,...". Same as question 6. Which Response will be selected? can 401 have Proxy-Authenticate header field?

 

Well, exact same answer as A6...:-) We will repeat it here for your convenience: The proxy will select 40X responses based on its app logic. A simple logic for
example would be aggregating the 401 and 407 responses, which were received from forked destinations within a certain time limit. As you can see the RFC leaves this pretty open.
Yes - 401 response can accommodate Proxy-Authenticate header field of 407 and vice-versa. See Table 2 in section 20 of the RFC, which details the requests and responses within which any SIP header may be used (hint: Lookup the WWW-Authenticate and Proxy-Authenticate headers...).
Pay extra attention to as whether the particular field is optional or mandatory! For example in 407 response to an INVITE request the Proxy-Authenticate header is mandatory (because 407 is supposed to be generated by proxies and not by endpoints), while WWW-Authenticate is optional. The inverse is true for 401. Think about it!

 

Page 80 - Third Paragraph - "As discussed in Section 12.2.2, a Contact header field in a target refresh request updates the remote target URI. This allows a UA to provide a new contact address, should its address change during the duration of the dialog." - Can you please elaborate? 

 

Think about a simple case of endpoints A and B talking to each other. Now the IP address of one of them gets changed mid session because of expiration of DHCP lease. re-invite (or UPDATE) provides that endpoint to let the other endpoint about that change. The Contact header of the Re-invite will contain the new IP address for signaling, while the SDP can reflect the address change for the media (in the common case when the same address is used for both media and sig)

 

17.1.1 - INVITE transaction - Say the UAC receives 1xx response to the INVITE. As a result it moves to the proceeding state. Now 200 does not come for a long time. Does the UAC get hung (and the user waits forever)?

It is indeed a bit unfortunate the way 3261 17.1.1.2 is written. It seems that the diff between the calling and proceeding states should be just the elimination of the need to retransmit the INVITE (over unreliable transport)(since receiving 1xx indicates that the INVITE reached its destination (or at least the retransmission is taken care of by statefull proxy (which is why they do not allow stateless proxy to return 100))). The problem is that according the RFC the transaction-timer B (i.e. when you should give up on waiting for a final response) seems to be active only when you are in the initial state (Calling). We believe that developers of SIP stacks should continue to guard timer-B also when in the proceeding state (otherwise we end up with what you have described).

 

© 2003-2010, SIPKnowledge.