forked from mirrors/linphone-iphone
fix bug for refer state notifications and update ortp
This commit is contained in:
parent
c0c9ebc214
commit
e1faecc5e5
4 changed files with 30 additions and 6 deletions
|
|
@ -341,6 +341,8 @@ static void call_accepted(SalOp *op){
|
|||
}
|
||||
linphone_core_update_streams (lc,call,md);
|
||||
linphone_call_set_state(call,LinphoneCallPaused,"Call paused");
|
||||
if (call->refer_pending)
|
||||
linphone_core_start_refered_call(lc,call);
|
||||
}else if (sal_media_description_has_dir(md,SalStreamRecvOnly)){
|
||||
/*we are put on hold when the call is initially accepted */
|
||||
if (lc->vtable.display_status){
|
||||
|
|
@ -757,8 +759,10 @@ static void refer_received(Sal *sal, SalOp *op, const char *referto){
|
|||
ms_message("Automatically pausing current call to accept transfer.");
|
||||
linphone_core_pause_call(lc,call);
|
||||
call->was_automatically_paused=TRUE;
|
||||
}
|
||||
linphone_core_start_refered_call(lc,call);
|
||||
/*then we will start the refered when the pause is accepted, in order to serialize transactions within the dialog.
|
||||
* Indeed we need to avoid to send a NOTIFY to inform about of state of the refered call while the pause isn't completed.
|
||||
**/
|
||||
}else linphone_core_start_refered_call(lc,call);
|
||||
}else if (lc->vtable.refer_received){
|
||||
lc->vtable.refer_received(lc,referto);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -734,7 +734,7 @@ static int send_notify_for_refer(int did, const char *sipfrag){
|
|||
eXosip_call_build_notify(did,EXOSIP_SUBCRSTATE_ACTIVE,&msg);
|
||||
if (msg==NULL){
|
||||
eXosip_unlock();
|
||||
ms_error("Could not build NOTIFY for refer.");
|
||||
ms_warning("Could not build NOTIFY for refer.");
|
||||
return -1;
|
||||
}
|
||||
osip_message_set_content_type(msg,"message/sipfrag");
|
||||
|
|
@ -760,7 +760,10 @@ int sal_call_notify_refer_state(SalOp *h, SalOp *newcall){
|
|||
}
|
||||
}else{
|
||||
if (!newcall->terminated){
|
||||
send_notify_for_refer(h->did,"SIP/2.0 200 Ok\r\n");
|
||||
if (send_notify_for_refer(h->did,"SIP/2.0 200 Ok\r\n")==-1){
|
||||
/* we need previous notify transaction to complete, so buffer the request for later*/
|
||||
h->sipfrag_pending="SIP/2.0 200 Ok\r\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1536,7 +1539,7 @@ static void process_refer(Sal *sal, SalOp *op, eXosip_event_t *ev){
|
|||
}
|
||||
}
|
||||
|
||||
void process_notify(Sal *sal, eXosip_event_t *ev){
|
||||
static void process_notify(Sal *sal, eXosip_event_t *ev){
|
||||
osip_header_t *h=NULL;
|
||||
char *from=NULL;
|
||||
SalOp *op=find_op(sal,ev);
|
||||
|
|
@ -1900,6 +1903,18 @@ static void other_request_reply(Sal *sal,eXosip_event_t *ev){
|
|||
}
|
||||
}
|
||||
|
||||
static void process_in_call_reply(Sal *sal, eXosip_event_t *ev){
|
||||
SalOp *op=find_op(sal,ev);
|
||||
if (ev->response){
|
||||
if (ev->request && strcmp(osip_message_get_method(ev->request),"NOTIFY")==0){
|
||||
if (op->sipfrag_pending){
|
||||
send_notify_for_refer(op->did,op->sipfrag_pending);
|
||||
op->sipfrag_pending=NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static bool_t process_event(Sal *sal, eXosip_event_t *ev){
|
||||
ms_message("linphone process event get a message %d\n",ev->type);
|
||||
switch(ev->type){
|
||||
|
|
@ -1961,6 +1976,10 @@ static bool_t process_event(Sal *sal, eXosip_event_t *ev){
|
|||
return process_authentication(sal,ev);
|
||||
}
|
||||
break;
|
||||
case EXOSIP_CALL_MESSAGE_ANSWERED:
|
||||
ms_message("EXOSIP_CALL_MESSAGE_ANSWERED ");
|
||||
process_in_call_reply(sal,ev);
|
||||
break;
|
||||
case EXOSIP_IN_SUBSCRIPTION_NEW:
|
||||
ms_message("CALL_IN_SUBSCRIPTION_NEW ");
|
||||
sal_exosip_subscription_recv(sal,ev);
|
||||
|
|
|
|||
|
|
@ -66,6 +66,7 @@ struct SalOp{
|
|||
char *replaces;
|
||||
char *referred_by;
|
||||
const SalAuthInfo *auth_info;
|
||||
const char *sipfrag_pending;
|
||||
bool_t supports_session_timers;
|
||||
bool_t sdp_offering;
|
||||
bool_t reinvite;
|
||||
|
|
|
|||
2
oRTP
2
oRTP
|
|
@ -1 +1 @@
|
|||
Subproject commit 5e7a3b571a073cab29e52634c11f780d7008e0e8
|
||||
Subproject commit 41d13b7e491c7fc418987b63ff6ef80c7e8895a4
|
||||
Loading…
Add table
Reference in a new issue