linphone-developers
[Top][All Lists]
Advanced

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

Re: [Linphone-developers] coreapi/callbacks.c : Call state Remote ringin


From: Simon Morlat
Subject: Re: [Linphone-developers] coreapi/callbacks.c : Call state Remote ringing : Set only when soundcard working
Date: Mon, 14 Feb 2011 17:32:28 +0100

Hello,

Thanks Romary for pointing this mistake. THis is now fixed in git.

Simon

Le vendredi 11 février 2011 à 11:38 +0100, Romary Sonrier a écrit :
> Hello,
> 
> I have a question about the following piece of code ( from
> coreapi/callbacks.c) :
> 
> The function call_ringing function, only call 
> 
> linphone_call_set_state(call,LinphoneCallOutgoingRinging,"Remote
> ringing");
> when the soundcard works. This is depending of the meaning of the
> state LinphoneCallOutgoingRinging, which seems to be done when the
> remote is ringing. 
> 
> In my case, i don't use soundcards, but files instead, so i don't get
> the call state "Ringing", which is a issue to me.
> 
> > static void call_ringing(SalOp *h){
> >         LinphoneCore *lc=(LinphoneCore
> > *)sal_get_user_pointer(sal_op_get_sal(h));
> >         LinphoneCall
> > *call=(LinphoneCall*)sal_op_get_user_pointer(h);
> >         SalMediaDescription *md;
> > 
> >         if (call==NULL) return;
> > 
> >         if (lc->vtable.display_status)
> >                 lc->vtable.display_status(lc,_("Remote ringing."));
> > 
> >         md=sal_call_get_final_media_description(h);
> >         if (md==NULL){
> >                 if (lc->ringstream && lc->dmfs_playing_start_time!
> > =0){
> >                         ring_stop(lc->ringstream);
> >                         lc->ringstream=NULL;
> >                         lc->dmfs_playing_start_time=0;
> >                 }
> >                 if (lc->ringstream!=NULL) return;       /*already
> > ringing !*/
> >                 if (lc->sound_conf.play_sndcard!=NULL){
> >                         MSSndCard
> > *ringcard=lc->sound_conf.lsd_card ? lc->sound_conf.lsd_card :
> > lc->sound_conf.play_sndcard;
> >                         ms_message("Remote ringing...");
> > 
> > lc->ringstream=ring_start(lc->sound_conf.remote_ring,2000,ringcard);
> > 
> > linphone_call_set_state(call,LinphoneCallOutgoingRinging,"Remote
> > ringing");
> >                 }
> >         }else{
> >                 /*accept early media */
> >                 if (call->audiostream && call->audiostream->ticker!
> > =NULL){
> >                         /*streams already started */
> >                         ms_message("Early media already started.");
> >                         return;
> >                 }
> >                 if (lc->vtable.show) lc->vtable.show(lc);
> >                 if (lc->vtable.display_status)
> >                         lc->vtable.display_status(lc,_("Early
> > media."));
> > 
> > linphone_call_set_state(call,LinphoneCallOutgoingEarlyMedia,"Early
> > media");
> >                 if (lc->ringstream!=NULL){
> >                         ring_stop(lc->ringstream);
> >                         lc->ringstream=NULL;
> >                 }
> >                 ms_message("Doing early media...");
> >                 linphone_core_update_streams (lc,call,md);
> >         }
> > }
> 
> So i made a small patch, to resolved this issue. 
> > diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c
> > index f40cc44..9fc36b8 100644
> > --- a/coreapi/callbacks.c
> > +++ b/coreapi/callbacks.c
> > @@ -237,8 +237,8 @@ static void call_ringing(SalOp *h){
> >                         MSSndCard
> > *ringcard=lc->sound_conf.lsd_card ? lc->sound_conf.lsd_card :
> > lc->sound_conf.play_sndcard;
> >                         ms_message("Remote ringing...");
> > 
> > lc->ringstream=ring_start(lc->sound_conf.remote_ring,2000,ringcard);
> > -
> > linphone_call_set_state(call,LinphoneCallOutgoingRinging,"Remote
> > ringing");             
> >                 }
> > +
> > linphone_call_set_state(call,LinphoneCallOutgoingRinging,"Remote
> > ringing");             
> >         }else{
> >                 /*accept early media */
> >                 if (call->audiostream && call->audiostream->ticker!
> > =NULL){
> 
> There is still an issue, maybe, because linphone_call_set_state could
> be called each time a 180/ringing packet arrives.
> 
> Another patch that could be done, woudl be to add a new call state
> LinphoneCallOutgoingRemoteRinging ( and replace
> LinphoneCallOutgoingRinging  by LinphoneCallOutgoingLocalRinging ),
> This would permit to clearly distinguish which side of the call is
> ringing.
> 
> Does someone have a point of view on this suject ? 
> What would be the right way to have a more generic API ?
> 
> 
> Regards,
> 
> Romary
> _______________________________________________
> Linphone-developers mailing list
> address@hidden
> http://lists.nongnu.org/mailman/listinfo/linphone-developers





reply via email to

[Prev in Thread] Current Thread [Next in Thread]