Merge branch 'master' of git.linphone.org:linphone

This commit is contained in:
Sylvain Berfini 2012-05-09 12:15:35 +02:00
commit 65aa07c75f
22 changed files with 102 additions and 64 deletions

View file

@ -25,6 +25,7 @@
using namespace belledonnecomm;
using namespace ::std;
Mutex TunnelManager::sMutex;

View file

@ -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);
}

View file

@ -770,6 +770,14 @@ void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled){
cp->has_video=enabled;
}
const PayloadType* linphone_call_params_get_used_audio_codec(const LinphoneCallParams *cp) {
return cp->audio_codec;
}
const PayloadType* linphone_call_params_get_used_video_codec(const LinphoneCallParams *cp) {
return cp->video_codec;
}
/**
* Returns whether video is enabled.
**/
@ -1146,6 +1154,7 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, const char *cna
bool_t use_ec;
if (used_pt!=-1){
call->current_params.audio_codec = rtp_profile_get_payload(call->audio_profile, used_pt);
if (playcard==NULL) {
ms_warning("No card defined for playback !");
}
@ -1262,6 +1271,7 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna
const char *addr=vstream->addr[0]!='\0' ? vstream->addr : call->resultdesc->addr;
call->video_profile=make_profile(call,call->resultdesc,vstream,&used_pt);
if (used_pt!=-1){
call->current_params.video_codec = rtp_profile_get_payload(call->video_profile, used_pt);
VideoStreamDir dir=VideoStreamSendRecv;
MSWebCam *cam=lc->video_conf.device;
bool_t is_inactive=FALSE;
@ -1333,6 +1343,10 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna
void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_muted, bool_t send_ringbacktone){
LinphoneCore *lc=call->core;
call->current_params.audio_codec = NULL;
call->current_params.video_codec = NULL;
LinphoneAddress *me=linphone_core_get_primary_contact_parsed(lc);
char *cname;
bool_t use_arc=linphone_core_adaptive_rate_control_enabled(lc);

View file

@ -2070,7 +2070,7 @@ int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, LinphonePro
sal_op_set_contact(call->op, contact);
ms_free(contact);
}
linphone_core_stop_dtmf_stream(lc);
linphone_call_init_media_streams(call);
if (lc->ringstream==NULL)
audio_stream_prepare_sound(call->audiostream,lc->sound_conf.play_sndcard,lc->sound_conf.capt_sndcard);
@ -4393,7 +4393,7 @@ void linphone_core_refresh_registers(LinphoneCore* lc) {
elem=linphone_core_get_proxy_config_list(lc);
for(;elem!=NULL;elem=elem->next){
LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data;
if (linphone_proxy_config_register_enabled(cfg) ) {
if (linphone_proxy_config_register_enabled(cfg) && linphone_proxy_config_get_expires(cfg)>0) {
linphone_proxy_config_refresh_register(cfg);
}
}
@ -4403,7 +4403,7 @@ void __linphone_core_invalidate_registers(LinphoneCore* lc){
const MSList *elem=linphone_core_get_proxy_config_list(lc);
for(;elem!=NULL;elem=elem->next){
LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)elem->data;
if (linphone_proxy_config_register_enabled(cfg) ) {
if (linphone_proxy_config_register_enabled(cfg)) {
linphone_proxy_config_edit(cfg);
linphone_proxy_config_done(cfg);
}
@ -4782,7 +4782,7 @@ void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *para
params->in_conference=FALSE;
}
void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float cx, float cy) {
void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float* cx, float* cy) {
VideoStream* vstream = call->videostream;
float zoom[3];
@ -4790,18 +4790,18 @@ void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float cx, f
zoom_factor = 1;
float halfsize = 0.5 * 1.0 / zoom_factor;
if ((cx - halfsize) < 0)
cx = 0 + halfsize;
if ((cx + halfsize) > 1)
cx = 1 - halfsize;
if ((cy - halfsize) < 0)
cy = 0 + halfsize;
if ((cy + halfsize) > 1)
cy = 1 - halfsize;
if ((*cx - halfsize) < 0)
*cx = 0 + halfsize;
if ((*cx + halfsize) > 1)
*cx = 1 - halfsize;
if ((*cy - halfsize) < 0)
*cy = 0 + halfsize;
if ((*cy + halfsize) > 1)
*cy = 1 - halfsize;
zoom[0] = zoom_factor;
zoom[1] = cx;
zoom[2] = cy;
zoom[1] = *cx;
zoom[2] = *cy;
ms_filter_call_method(vstream->output, MS_VIDEO_DISPLAY_ZOOM, &zoom);
}

View file

@ -183,6 +183,8 @@ char * linphone_call_log_to_str(LinphoneCallLog *cl);
struct _LinphoneCallParams;
typedef struct _LinphoneCallParams LinphoneCallParams;
const PayloadType* linphone_call_params_get_used_audio_codec(const LinphoneCallParams *cp);
const PayloadType* linphone_call_params_get_used_video_codec(const LinphoneCallParams *cp);
LinphoneCallParams * linphone_call_params_copy(const LinphoneCallParams *cp);
void linphone_call_params_enable_video(LinphoneCallParams *cp, bool_t enabled);
bool_t linphone_call_params_video_enabled(const LinphoneCallParams *cp);
@ -786,13 +788,13 @@ const MSList *linphone_core_get_video_codecs(const LinphoneCore *lc);
int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs);
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, PayloadType *pt);
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const PayloadType *pt);
int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t enable);
PayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate) ;
int linphone_core_get_payload_type_number(LinphoneCore *lc, PayloadType *pt);
int linphone_core_get_payload_type_number(LinphoneCore *lc, const PayloadType *pt);
const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt);
@ -1132,7 +1134,7 @@ typedef struct LinphoneTunnel LinphoneTunnel;
*/
LinphoneTunnel *linphone_core_get_tunnel(LinphoneCore *lc);
void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float cx, float cy);
void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float* cx, float* cy);
#ifdef __cplusplus
}

View file

@ -181,12 +181,12 @@ static void payload_type_set_enable(PayloadType *pt,int value)
else payload_type_unset_flag(pt,PAYLOAD_TYPE_ENABLED);
}
static bool_t payload_type_enabled(PayloadType *pt) {
static bool_t payload_type_enabled(const PayloadType *pt) {
return (((pt)->flags & PAYLOAD_TYPE_ENABLED)!=0);
}
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, PayloadType *pt){
if (ms_list_find(lc->codecs_conf.audio_codecs,pt) || ms_list_find(lc->codecs_conf.video_codecs,pt)){
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const PayloadType *pt){
if (ms_list_find(lc->codecs_conf.audio_codecs, (PayloadType*) pt) || ms_list_find(lc->codecs_conf.video_codecs, (PayloadType*)pt)){
return payload_type_enabled(pt);
}
ms_error("Getting enablement status of codec not in audio or video list of PayloadType !");
@ -202,7 +202,7 @@ int linphone_core_enable_payload_type(LinphoneCore *lc, PayloadType *pt, bool_t
return -1;
}
int linphone_core_get_payload_type_number(LinphoneCore *lc, PayloadType *pt){
int linphone_core_get_payload_type_number(LinphoneCore *lc, const PayloadType *pt){
return payload_type_get_number(pt);
}

View file

@ -68,6 +68,8 @@ struct _LinphoneCallParams{
LinphoneCall *referer; /*in case this call creation is consecutive to an incoming transfer, this points to the original call */
int audio_bw; /* bandwidth limit for audio stream */
LinphoneMediaEncryption media_encryption;
PayloadType *audio_codec;
PayloadType *video_codec;
bool_t has_video;
bool_t real_early_media; /*send real media even during early media (for outgoing calls)*/
bool_t in_conference; /*in conference mode */

View file

@ -218,7 +218,7 @@ void linphone_proxy_config_enableregister(LinphoneProxyConfig *obj, bool_t val){
* Sets the registration expiration time in seconds.
**/
void linphone_proxy_config_expires(LinphoneProxyConfig *obj, int val){
if (val<=0) val=600;
if (val<0) val=600;
obj->expires=val;
}

View file

@ -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);

View file

@ -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;

View file

@ -49,6 +49,7 @@ static gboolean do_login_noprompt(LinphoneProxyConfig *cfg){
tmp=linphone_address_as_string (addr);
do_login(ssctx,tmp,NULL);
linphone_address_destroy(addr);
linphone_gtk_load_identities();
return FALSE;
}
@ -62,14 +63,14 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg){
int nettype;
const char *passwd=NULL;
if (linphone_core_get_download_bandwidth(lc)==512 &&
linphone_core_get_upload_bandwidth(lc)==512)
nettype=NetworkKindOpticalFiber;
else nettype=NetworkKindAdsl;
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"login_internet_kind")),nettype);
gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"internet_kind")),nettype);
//gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"internet_kind")),nettype);
if (linphone_gtk_get_ui_config_int("automatic_login",0) ){
g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg);
return;
@ -88,7 +89,6 @@ void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg){
gtk_widget_hide(linphone_gtk_get_widget(mw,"disconnect_item"));
gtk_widget_hide(linphone_gtk_get_widget(mw,"main_frame"));
gtk_widget_show(linphone_gtk_get_widget(mw,"login_frame"));
gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"main_menu"),FALSE);
gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),FALSE);
str=g_strdup_printf(_("Please enter login information for %s"),linphone_proxy_config_get_domain(cfg));
gtk_label_set_text(GTK_LABEL(label),str);
@ -118,7 +118,6 @@ void linphone_gtk_exit_login_frame(void){
GtkWidget *mw=linphone_gtk_get_main_window();
gtk_widget_show(linphone_gtk_get_widget(mw,"main_frame"));
gtk_widget_hide(linphone_gtk_get_widget(mw,"login_frame"));
gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"main_menu"),TRUE);
gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),TRUE);
gtk_widget_show(linphone_gtk_get_widget(mw,"disconnect_item"));
}

View file

@ -774,13 +774,12 @@ void linphone_gtk_answer_clicked(GtkWidget *button){
void linphone_gtk_enable_video(GtkWidget *w){
gboolean val=gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w));
GtkWidget *selfview_item=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"selfview_item");
//GtkWidget *selfview_item=linphone_gtk_get_widget(linphone_gtk_get_main_window(),"selfview_item");
LinphoneVideoPolicy policy={0};
policy.automatically_initiate=policy.automatically_accept=val;
linphone_core_enable_video(linphone_gtk_get_core(),TRUE,TRUE);
linphone_core_set_video_policy(linphone_gtk_get_core(),&policy);
gtk_widget_set_sensitive(selfview_item,val);
if (val){
linphone_core_enable_video_preview(linphone_gtk_get_core(),
linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT));
@ -1418,7 +1417,6 @@ static void linphone_gtk_check_menu_items(void){
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(linphone_gtk_get_widget(
linphone_gtk_get_main_window(),"enable_video_item")), video_enabled);
gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(selfview_item),selfview);
gtk_widget_set_sensitive(selfview_item,video_enabled);
}
static gboolean linphone_gtk_can_manage_accounts(){

View file

@ -498,7 +498,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="use_action_appearance">False</property>
<property name="label" translatable="yes">Enable video</property>
<property name="label" translatable="yes">Always start video</property>
<property name="use_underline">True</property>
<signal name="toggled" handler="linphone_gtk_enable_video" swapped="no"/>
</object>

View file

@ -31,7 +31,7 @@ public interface LinphoneCall {
*
*/
static class State {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
private final int mValue;
public final int value() {return mValue;}
@ -119,7 +119,7 @@ public interface LinphoneCall {
*/
public static final State CallReleased = new State(18,"CallReleased");
@SuppressWarnings("unchecked")
private State(int value,String stringValue) {
mValue = value;
values.addElement(this);

View file

@ -31,7 +31,7 @@ public interface LinphoneCallLog {
*
*/
static class CallStatus {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
private final int mValue;
private final String mStringValue;
@ -52,7 +52,7 @@ public interface LinphoneCallLog {
*/
public final static CallStatus Declined = new CallStatus(3,"Declined");
@SuppressWarnings("unchecked")
private CallStatus(int value,String stringValue) {
mValue = value;
values.addElement(this);

View file

@ -18,8 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package org.linphone.core;
import java.util.List;
import java.util.Vector;
import org.linphone.core.LinphoneCallParams;
@ -34,7 +32,7 @@ public interface LinphoneCore {
* linphone core states
*/
static public class GlobalState {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
/**
* Off
@ -56,7 +54,7 @@ public interface LinphoneCore {
private final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private GlobalState(int value,String stringValue) {
mValue = value;
values.addElement(this);
@ -79,7 +77,7 @@ public interface LinphoneCore {
*
*/
static public class RegistrationState {
@SuppressWarnings("unchecked")
private static Vector values = new Vector();
/**
* None
@ -104,7 +102,7 @@ public interface LinphoneCore {
private final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private RegistrationState(int value,String stringValue) {
mValue = value;
values.addElement(this);
@ -127,7 +125,7 @@ public interface LinphoneCore {
*
*/
static public class FirewallPolicy {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
/**
* No firewall is assumed.
@ -145,7 +143,7 @@ public interface LinphoneCore {
private final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private FirewallPolicy(int value,String stringValue) {
mValue = value;
values.addElement(this);
@ -187,7 +185,7 @@ public interface LinphoneCore {
*
*/
static public class MediaEncryption {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
/**
* None
@ -204,7 +202,7 @@ public interface LinphoneCore {
protected final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private MediaEncryption(int value,String stringValue) {
mValue = value;
values.addElement(this);
@ -226,7 +224,7 @@ public interface LinphoneCore {
* EC Calibrator Status
*/
static public class EcCalibratorStatus {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
public static final int IN_PROGRESS_STATUS=0;
public static final int DONE_STATUS=1;
@ -247,7 +245,7 @@ public interface LinphoneCore {
private final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private EcCalibratorStatus(int value,String stringValue) {
mValue = value;
values.addElement(this);
@ -411,8 +409,7 @@ public interface LinphoneCore {
/**
* @return a list of LinphoneCallLog
*/
@SuppressWarnings("unchecked")
public List getCallLogs();
public LinphoneCallLog[] getCallLogs();
/**
* This method is called by the application to notify the Linphone core library when network is reachable.
@ -693,7 +690,7 @@ public interface LinphoneCore {
int getConferenceSize();
void terminateAllCalls();
@SuppressWarnings("unchecked") List getCalls();
LinphoneCall[] getCalls();
int getCallsNb();

View file

@ -36,7 +36,7 @@ abstract public class LinphoneCoreFactory {
factoryName = className;
}
@SuppressWarnings("unchecked")
public static final synchronized LinphoneCoreFactory instance() {
try {
if (theLinphoneCoreFactory == null) {

View file

@ -36,7 +36,7 @@ public interface LinphoneFriend {
*/
static class SubscribePolicy {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
protected final int mValue;
private final String mStringValue;
@ -54,7 +54,7 @@ public interface LinphoneFriend {
*/
public final static SubscribePolicy SPAccept = new SubscribePolicy(2,"SPAccept");
@SuppressWarnings("unchecked")
private SubscribePolicy(int value,String stringValue) {
mValue = value;
values.addElement(this);

View file

@ -27,7 +27,7 @@ import java.util.Vector;
*/
public class OnlineStatus {
@SuppressWarnings("unchecked")
static private Vector values = new Vector();
/**
* Offline
@ -77,7 +77,7 @@ public class OnlineStatus {
protected final int mValue;
private final String mStringValue;
@SuppressWarnings("unchecked")
private OnlineStatus(int value,String stringValue) {
mValue = value;
values.addElement(this);

View file

@ -13,6 +13,7 @@ OutputBaseFilename=setup
Compression=lzma
SolidCompression=yes
ShowLanguageDialog=yes
UninstallDisplayIcon={app}\bin\linphone.exe
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"

View file

@ -22,15 +22,15 @@ if test "$readline_prefix" != "none"; then
AC_CHECK_HEADERS(readline.h readline/readline.h, readline_h_found=yes)
AC_CHECK_HEADERS(history.h readline/history.h)
AC_CHECK_LIB(readline, readline, [readline_libs_found=yes],[],[-lncurses])
AC_CHECK_LIB(readline, readline, [readline_libs_found=yes],[],[])
LIBS=$LIBS_save
CPPFLAGS=$CPPFLAGS_save
if test "$readline_libs_found$readline_h_found" != "yesyes" ; then
AC_MSG_WARN("Could not find libreadline headers or library, linphonec will have limited prompt features")
AC_MSG_WARN([Could not find libreadline headers or library, linphonec will have limited prompt features])
else
READLINE_LIBS="$READLINE_LIBS -lreadline -lncurses"
READLINE_LIBS="$READLINE_LIBS -lreadline "
fi

@ -1 +1 @@
Subproject commit 153983f60d0b1865bd1e6f164d7f48ff4fc4e7eb
Subproject commit f08143a159df482c84e71307071da6655910ad4d