Fixing this issue requires changing how we select proxy responses.  
I propose the following behavior:
 
1 - Responses from outside the proxy should be preferred over responses 
generated internally by the proxy.
2 - 2xx responses should be preferred over all others;  
-- Within 2xx responses, 200 responses should be the least preferred.
3 - 3xx responses should be preferred over 4xx, 5xx, 6xx;  
-- Within 3xx responses, 300 responses should be the least preferred.
4 - 6xx responses should be preferred over 4xx, 5xx.
5 - 4xx responses should be preferred over5xx; 
-- Within 4xx responses:
--- 404 should not be returned unless it is the only valid response.
--- 408 should not be returned unless 404 is the only other valid response.
--- 487 should only be returned if the calling party generated the CANCEL 
request.
6 - 5xx responses should be the least preferred.

This behavior will probably require that we distinguish more clearly between 
external requests/responses and 
those generated internally by the proxy. 

Current behavior is demonstrated by the following test cases:
========================================================
I have created three test cases.
For all cases: 
User 771 is configured to forward simultaneously to 272 and 274 and has no 
voicemail.  
User 272 is configured with a registered phone.  User 274 is not configured 
with a registered phone.
User 271 calls 771, Registrar returns 302 with contacts for 272 and 274.  
Proxy forks two invites(272, 274) to self.  
For 272-forked-Invite, Registrar returns 302 with single contact;  
For 272-forked-Invite, Registrar returns 404 for User 274.
Proxy "forks" single invite(272) to self.
Proxy sends single invite to 272.

----------------------------------------------------------
Case 1- Simply don't answer call to 272. 
Result:404 response is sent to caller(271),
Preferred response: 408

Details:  
- 272 rings for approx 30 seconds.  
- After 30 secs, 404 response is sent to caller(271) and 
- Cancel is sent for invite to 272 and 
- 408 response is generated and consumed within proxy for 272 fork(s).


----------------------------------------------------------
Case 2- Caller 271 hangs up.
Result:   404 Response is sent to caller (271)
Preferred response: 487

Details: 
- Cancel is sent to 272 fork(s).  
- 487 response is returned by 272.  
- 408 response is generated within proxy for 272 fork(s).  
- 404 Response is sent to caller (271)


----------------------------------------------------------
Case 3- Caller 272 refuses call.
Result:  404 response is sent to caller (271).
Preferred response: 603
Details: 
- 603 response is returned from 272.  
- 603 response is returned on all internal proxy paths.  
- 404 response is sent to caller (271).



_______________________________________________
sipx-dev mailing list
[email protected]
List Archive: http://list.sipfoundry.org/archive/sipx-dev
Unsubscribe: http://list.sipfoundry.org/mailman/listinfo/sipx-dev

Reply via email to