|
From: | Bryant Bunderson |
Subject: | [Linphone-developers] Fix for Inbound calls terminated at 30 seconds |
Date: | Tue, 12 Aug 2014 22:52:41 +0000 |
Inbound phone calls to Linphone-android are being disconnected after 30 seconds. I located the piece of code that was causing it. It's line 9 of the belle-sip/dialoc.c file. When the dialog is established for the call and it's an incoming call (linphone
is acting as a server) then linphone requires that an ACK is received from the server before a timeout period of T1*64. If the server doesn't send an ACK then the timer fires and the call is terminated. My SIP provider is not sending the ACK. Is it okay to
ignore the missing ACK? I have commented out that line and things seem to work just fine. Thanks for your help.
1 int belle_sip_dialog_establish_full(belle_sip_dialog_t *obj, belle_sip_request_t *req, belle_sip_response_t *resp){
2 belle_sip_header_contact_t *ct=belle_sip_message_get_header_by_type(resp,belle_sip_header_contact_t);
3 belle_sip_header_to_t *to=belle_sip_message_get_header_by_type(resp,belle_sip_header_to_t);
4
5 if (strcmp(belle_sip_request_get_method(req),"INVITE")==0)
6 obj->needs_ack=TRUE;
7
8 if (obj->is_server && strcmp(belle_sip_request_get_method(req),"INVITE")==0){
9 belle_sip_dialog_init_200Ok_retrans(obj,resp); // <--- Why must the 200OK be ACKed for incoming phone calls?
10 } else if (!obj->is_server ) {
11 if (!ct && !obj->remote_target) {
12 belle_sip_error("Missing contact header in resp [%p] cannot set remote target for dialog [%p]",resp,obj);
13 return -1;
14 }
15 if (ct) {
16 /*remote Contact header may have changed between early dialog to confirmed*/
17 if (obj->remote_target) belle_sip_object_unref(obj->remote_target);
18 obj->remote_target=(belle_sip_header_address_t*)belle_sip_object_ref(ct);
19 }
20 }
21 /*update to tag*/
22 set_to_tag(obj,to);
23 set_state(obj,BELLE_SIP_DIALOG_CONFIRMED);
24 return 0;
25 }
|
[Prev in Thread] | Current Thread | [Next in Thread] |