end:
ms_free(cname);
linphone_address_destroy(me);
- lc->call->state=LCStateAVRunning;
+ call->state=LinphoneCallAVRunning;
}
+ static void linphone_call_log_fill_stats(LinphoneCallLog *log, AudioStream *st){
+ audio_stream_get_local_rtp_stats (st,&log->local_stats);
+ }
+
void linphone_core_stop_media_streams(LinphoneCore *lc, LinphoneCall *call){
+#ifdef PRINTF_DEBUG
+ printf("%s(%d)\n",__FUNCTION__,__LINE__);
+#endif
if (lc->audiostream!=NULL) {
+ linphone_call_log_fill_stats (call->log,lc->audiostream);
audio_stream_stop(lc->audiostream);
lc->audiostream=NULL;
}
void sal_address_destroy(SalAddress *u){
osip_from_free((osip_from_t*)u);
}
+ void sal_set_keepalive_period(Sal *ctx,unsigned int value) {
+ eXosip_set_option (EXOSIP_OPT_UDP_KEEP_ALIVE, &value);
+ }
+/**
+ * Send a re-Invite used to hold the current call
+ *
+ * @ingroup call_control
+ * @param lc the LinphoneCore object
+ * @param url the destination of the call (sip address).
+**/
+int sal_call_hold(SalOp *h, bool_t holdon)
+{
+ int err=0;
+
+ osip_message_t *reinvite;
+ if(eXosip_call_build_request(h->did,"INVITE",&reinvite) != OSIP_SUCCESS)
+ return -1;
+ if(reinvite==NULL)
+ return -2;
+ osip_message_set_subject(reinvite,osip_strdup("Phone Call Hold"));
+ osip_message_set_allow(reinvite, "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO");
+ if (h->base.root->session_expires!=0){
+ osip_message_set_header(reinvite, "Session-expires", "200");
+ osip_message_set_supported(reinvite, "timer");
+ }
+ //add something to say that the distant sip phone will be in sendonly/sendrecv mode
+ if (h->base.local_media){
+ h->sdp_offering=TRUE;
+ set_hold_status_to_desc(h->base.local_media,holdon);
+ set_sdp_from_desc(reinvite,h->base.local_media);
+ }else h->sdp_offering=FALSE;
+ eXosip_lock();
+ err = eXosip_call_send_request(h->did, reinvite);
+ eXosip_unlock();
+
+ return err;
+}
+