]> sjero.net Git - linphone/commitdiff
Merge branch 'master' into dev_multicall
authorSimon Morlat <simon.morlat@linphone.org>
Fri, 21 May 2010 12:58:39 +0000 (14:58 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Fri, 21 May 2010 12:58:39 +0000 (14:58 +0200)
19 files changed:
Makefile.am
NEWS
build/android/Android.mk
coreapi/address.c
coreapi/linphonecore.c
coreapi/linphonecore.h
coreapi/linphonecore_jni.cc
coreapi/private.h
coreapi/sal.h
coreapi/sal_eXosip2.c
gtk-glade/friendlist.c
gtk-glade/incall_view.c
gtk-glade/main.c
gtk-glade/propertybox.c
java/common/org/linphone/core/LinphoneCore.java
java/common/org/linphone/core/LinphoneCoreFactory.java
java/common/org/linphone/core/LinphoneLogHandler.java [new file with mode: 0644]
java/j2me/org/linphone/core/LinphoneCoreException.java
po/POTFILES.in

index 5cd5cdd2b84b1b7150b6021481130d6a373c7427..37abf47a9f9abb46f0fbe48a940b2651a013e256 100644 (file)
@@ -16,11 +16,7 @@ SUBDIRS = m4 pixmaps po $(ORTP_DIR) mediastreamer2\
 
 ACLOCAL_FLAGS=-I$(top_srcdir)/m4
 
-
-INSTALLDIR=$(shell cd $(top_builddir) && pwd)/linphone-install
-INSTALLDIR_WITH_PREFIX=$(INSTALLDIR)/$(prefix)
-ZIPFILE=$(shell cd $(top_builddir) && pwd)/$(PACKAGE)-win32-$(VERSION).zip
-ZIP_EXCLUDED=include lib \
+OPTIONAL_SOUNDS=\
                share/sounds/linphone/rings/synth.wav \
                share/sounds/linphone/rings/tapping.wav \
                share/sounds/linphone/rings/orig.wav \
@@ -28,6 +24,23 @@ ZIP_EXCLUDED=include lib \
                share/sounds/linphone/rings/rock.wav
 
 
+INSTALLDIR=$(shell cd $(top_builddir) && pwd)/linphone-install
+INSTALLDIR_WITH_PREFIX=$(INSTALLDIR)/$(prefix)
+ZIPFILE=$(shell cd $(top_builddir) && pwd)/$(PACKAGE)-win32-$(VERSION).zip
+ZIP_EXCLUDED=include lib \
+               $(OPTIONAL_SOUNDS)
+
+SDK_ZIPFILE=$(shell cd $(top_builddir) && pwd)/lib$(PACKAGE)-win32-$(VERSION).zip
+SDK_EXCLUDED= \
+       bin/linphone-3.exe \
+       lib/*.la \
+       share/linphone \
+       share/pixmaps \
+       share/locale \
+       share/gnome \
+       $(OPTIONAL_SOUNDS)
+
+
 GTK_PREFIX=/usr
 GTK_FILELIST=gtk+-2.18.5.filelist
 GTK_FILELIST_PATH=$(shell cd $(top_srcdir) && pwd)/$(GTK_FILELIST)
@@ -117,6 +130,18 @@ zip:
        cp -f $(top_srcdir)/COPYING $(INSTALLDIR_WITH_PREFIX)/.
        cd $(INSTALLDIR_WITH_PREFIX) && zip -r $(ZIPFILE) *
 
+sdk:
+       rm -f $(SDK_ZIPFILE)
+       rm -rf $(INSTALLDIR)
+       mkdir -p $(INSTALLDIR)
+       make install DESTDIR=$(INSTALLDIR)
+# remove unwanted stuff (gtk interface)
+       cd $(INSTALLDIR_WITH_PREFIX) && rm -rf $(SDK_EXCLUDED)
+       make other-cherrypick
+       cp -f $(top_srcdir)/README $(INSTALLDIR_WITH_PREFIX)/.
+       cp -f $(top_srcdir)/COPYING $(INSTALLDIR_WITH_PREFIX)/.
+       cd $(INSTALLDIR_WITH_PREFIX) && zip -r $(SDK_ZIPFILE) *
+
 filelist: zip
        cd $(INSTALLDIR_WITH_PREFIX) && \
        rm -f $(PACKAGE_WIN32_FILELIST) && \
diff --git a/NEWS b/NEWS
index cc43b585d924a7e91a6509f5ae890701145e00a5..04d7ebc357083d244bdbd8ddb86587c088897a13 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-linphone-3.3.0 -- May 10, 2010
+linphone-3.3.0 -- May 19, 2010
        * liblinphone is ported to iphoneOS and Google Android
        * Internal refactoring of liblinphone (code factorisation, encapsulation
                of signaling)
index 529fc02ee81d4f46978b340f45949641a115d1b3..50ad5bef283da54e104122ee83f9b857b45bfb41 100755 (executable)
@@ -78,7 +78,7 @@ LOCAL_STATIC_LIBRARIES := \
        libeXosip2 \
        libosip2 \
        libgsm
-
+#      libmsilbc \
 LOCAL_MODULE_CLASS = SHARED_LIBRARIES
 
 include $(BUILD_SHARED_LIBRARY)
index 1d893aedea7af3731f8497cb75da396869be299e..f8051318cfd585753125b6b9ccc1d146eae07275 100644 (file)
@@ -57,6 +57,14 @@ const char *linphone_address_get_display_name(const LinphoneAddress* u){
        return sal_address_get_display_name(u);
 }
 
+/**
+ * Returns the display name without quotes.
+ * @note WARNING: the returned string must be freed by user.
+**/
+char *linphone_address_get_display_name_unquoted(const LinphoneAddress *addr){
+       return sal_address_get_display_name_unquoted(addr);
+}
+
 /**
  * Returns the username.
 **/
index e45a1213c832fa0de4edf517b5e2ae7a43a7c6e3..a1589933d1e0d14ea86c8fa6263868bcec204837 100644 (file)
@@ -223,6 +223,23 @@ char * linphone_call_log_to_str(LinphoneCallLog *cl){
        return tmp;
 }
 
+/**
+ * Returns RTP statistics computed locally regarding the call.
+ * 
+**/
+const rtp_stats_t *linphone_call_log_get_local_stats(const LinphoneCallLog *cl){
+       return &cl->local_stats;
+}
+
+/**
+ * Returns RTP statistics computed by remote end and sent back via RTCP.
+ *
+ * @note Not implemented yet.
+**/
+const rtp_stats_t *linphone_call_log_get_remote_stats(const LinphoneCallLog *cl){
+       return &cl->remote_stats;
+}
+
 void linphone_call_log_set_user_pointer(LinphoneCallLog *cl, void *up){
        cl->user_pointer=up;
 }
@@ -536,6 +553,8 @@ static void sip_config_read(LinphoneCore *lc)
                lp_config_get_int(lc->config,"sip","register_only_when_network_is_up",1);
        lc->sip_conf.ping_with_options=lp_config_get_int(lc->config,"sip","ping_with_options",1);
        lc->sip_conf.auto_net_state_mon=lp_config_get_int(lc->config,"sip","auto_net_state_mon",1);
+       lc->sip_conf.keepalive_period=lp_config_get_int(lc->config,"sip","keepalive_period",10000);
+       sal_set_keepalive_period(lc->sal,lc->sip_conf.keepalive_period);
 }
 
 static void rtp_config_read(LinphoneCore *lc)
@@ -2201,11 +2220,16 @@ void linphone_core_start_media_streams(LinphoneCore *lc, LinphoneCall *call){
                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;
        }
@@ -3437,6 +3461,28 @@ void linphone_core_set_audio_transports(LinphoneCore *lc, RtpTransport *rtp, Rtp
        lc->a_rtcp=rtcp;
 }
 
+/**
+ * Retrieve RTP statistics regarding current call.
+ * @param local RTP statistics computed locally.
+ * @param remote RTP statistics computed by far end (obtained via RTCP feedback).
+ *
+ * @note Remote RTP statistics is not implemented yet.
+ *
+ * @returns 0 or -1 if no call is running.
+**/
+int linphone_core_get_current_call_stats(LinphoneCore *lc, rtp_stats_t *local, rtp_stats_t *remote){
+       LinphoneCall *call=linphone_core_get_current_call (lc);
+       if (call!=NULL){
+               if (lc->audiostream!=NULL){
+                       memset(remote,0,sizeof(*remote));
+                       audio_stream_get_local_rtp_stats (lc->audiostream,local);
+                       return 0;
+               }
+       }
+       return -1;
+}
+
 void net_config_uninit(LinphoneCore *lc)
 {
        net_config_t *config=&lc->net_conf;
@@ -3470,6 +3516,7 @@ void sip_config_uninit(LinphoneCore *lc)
        lp_config_set_int(lc->config,"sip","use_ipv6",config->ipv6_enabled);
        lp_config_set_int(lc->config,"sip","register_only_when_network_is_up",config->register_only_when_network_is_up);
 
+
        lp_config_set_int(lc->config,"sip","default_proxy",linphone_core_get_default_proxy(lc,NULL));
        
        for(elem=config->proxies,i=0;elem!=NULL;elem=ms_list_next(elem),i++){
@@ -3565,6 +3612,9 @@ void codecs_config_uninit(LinphoneCore *lc)
                lp_config_set_int(lc->config,key,"enabled",linphone_core_payload_type_enabled(lc,pt));
                index++;
        }
+       sprintf(key,"audio_codec_%i",index);
+       lp_config_clean_section (lc->config,key);
+       
        index=0;
        for(node=config->video_codecs;node!=NULL;node=ms_list_next(node)){
                pt=(PayloadType*)(node->data);
@@ -3575,6 +3625,9 @@ void codecs_config_uninit(LinphoneCore *lc)
                lp_config_set_string(lc->config,key,"recv_fmtp",pt->recv_fmtp);
                index++;
        }
+       sprintf(key,"video_codec_%i",index);
+       lp_config_clean_section (lc->config,key);
+       
        ms_list_free(lc->codecs_conf.audio_codecs);
        ms_list_free(lc->codecs_conf.video_codecs);
 }
index d7ac4abcc2c53c6e8c993810e93854c13598c7f9..c5834566d3c6f91267354bd0f43585f93622196d 100644 (file)
@@ -1,6 +1,6 @@
 /*
 linphone
-Copyright (C) 2000  Simon MORLAT (simon.morlat@linphone.org)
+Copyright (C) 2000 - 2010 Simon MORLAT (simon.morlat@linphone.org)
 
 This program is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public License
@@ -64,6 +64,7 @@ LinphoneAddress * linphone_address_new(const char *uri);
 LinphoneAddress * linphone_address_clone(const LinphoneAddress *uri);
 const char *linphone_address_get_scheme(const LinphoneAddress *u);
 const char *linphone_address_get_display_name(const LinphoneAddress* u);
+char *linphone_address_get_display_name_unquoted(const LinphoneAddress *u);
 const char *linphone_address_get_username(const LinphoneAddress *u);
 const char *linphone_address_get_domain(const LinphoneAddress *u);
 void linphone_address_set_display_name(LinphoneAddress *u, const char *display_name);
@@ -144,6 +145,8 @@ typedef struct _LinphoneCallLog{
        int duration; /**<Duration of the call in seconds*/
        char *refkey;
        void *user_pointer;
+       rtp_stats_t local_stats;
+       rtp_stats_t remote_stats;
        struct _LinphoneCore *lc;
 } LinphoneCallLog;
 
@@ -154,6 +157,8 @@ void linphone_call_log_set_user_pointer(LinphoneCallLog *cl, void *up);
 void *linphone_call_log_get_user_pointer(const LinphoneCallLog *cl);
 void linphone_call_log_set_ref_key(LinphoneCallLog *cl, const char *refkey);
 const char *linphone_call_log_get_ref_key(const LinphoneCallLog *cl);
+const rtp_stats_t *linphone_call_log_get_local_stats(const LinphoneCallLog *cl);
+const rtp_stats_t *linphone_call_log_get_remote_stats(const LinphoneCallLog *cl);
 char * linphone_call_log_to_str(LinphoneCallLog *cl);
 
 typedef enum{
@@ -831,6 +836,8 @@ void linphone_core_destroy(LinphoneCore *lc);
 /*for advanced users:*/
 void linphone_core_set_audio_transports(LinphoneCore *lc, RtpTransport *rtp, RtpTransport *rtcp);
 
+int linphone_core_get_current_call_stats(LinphoneCore *lc, rtp_stats_t *local, rtp_stats_t *remote);
+
 #ifdef __cplusplus
 }
 #endif
index 390c56232e78c38e0d975f715325cc33de983fd3..7efc94ff5e9244e1a6aee9cf7c33cdbb7f624fa8 100644 (file)
@@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "linphonecore.h"
 #ifdef ANDROID
 #include <android/log.h>
+extern "C" void libmsilbc_init();
 #endif /*ANDROID*/
 
 extern "C" void ms_andsnd_register_card(JavaVM *jvm) ;
@@ -160,7 +161,9 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv*
        LinphoneCoreData* ldata = new LinphoneCoreData(env,thiz,jlistener,juserdata);
 #ifdef ANDROID
        ms_andsnd_register_card(jvm);
+       // requires an fpu libmsilbc_init();
 #endif /*ANDROID*/
+
        jlong nativePtr = (jlong)linphone_core_new(     &ldata->vTable
                        ,userConfig
                        ,factoryConfig
index f4e308f6502e8516ecf4c3fb5cd56bc8c58fb245..e821753fa088949cb4b9316b81b64a60ef05f6c9 100644 (file)
@@ -256,6 +256,7 @@ typedef struct sip_config
        bool_t register_only_when_network_is_up;
        bool_t ping_with_options;
        bool_t auto_net_state_mon;
+       unsigned int keepalive_period; /* interval in ms between keep alive messages sent to the proxy server*/
 } sip_config_t;
 
 typedef struct rtp_config
index 7643ab7da171e8837f27bb57e6b73c53cc1cfc36..18403045e81db244e53344d0579107906475a643 100644 (file)
@@ -45,6 +45,7 @@ SalAddress * sal_address_new(const char *uri);
 SalAddress * sal_address_clone(const SalAddress *addr);
 const char *sal_address_get_scheme(const SalAddress *addr);
 const char *sal_address_get_display_name(const SalAddress* addr);
+char *sal_address_get_display_name_unquoted(const SalAddress *addr);
 const char *sal_address_get_username(const SalAddress *addr);
 const char *sal_address_get_domain(const SalAddress *addr);
 void sal_address_set_display_name(SalAddress *addr, const char *display_name);
@@ -228,6 +229,8 @@ void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs);
 int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure);
 ortp_socket_t sal_get_socket(Sal *ctx);
 void sal_set_user_agent(Sal *ctx, const char *user_agent);
+/*keepalive period in ms*/
+void sal_set_keepalive_period(Sal *ctx,unsigned int value);
 void sal_use_session_timers(Sal *ctx, int expires);
 int sal_iterate(Sal *sal);
 MSList * sal_get_pending_auths(Sal *sal);
index 6091f18dbaa7ccd214751846eba1d40f4b31358a..32bd677a62e90c372984a91b84bd10997aa9f13c 100644 (file)
@@ -1591,7 +1591,17 @@ int sal_unregister(SalOp *h){
        return 0;
 }
 
-
+static void sal_address_quote_displayname(SalAddress *addr){
+       osip_from_t *u=(osip_from_t*)addr;
+       if (u->displayname!=NULL && u->displayname[0]!='\0' 
+               && u->displayname[0]!='"'){
+               int len=strlen(u->displayname)+1+2;
+               char *quoted=osip_malloc(len);
+               snprintf(quoted,len,"\"%s\"",u->displayname);
+               osip_free(u->displayname);
+               u->displayname=quoted;
+       }
+}
 
 SalAddress * sal_address_new(const char *uri){
        osip_from_t *from;
@@ -1600,6 +1610,7 @@ SalAddress * sal_address_new(const char *uri){
                osip_from_free(from);
                return NULL;
        }
+       sal_address_quote_displayname ((SalAddress*)from);
        return (SalAddress*)from;
 }
 
@@ -1621,6 +1632,18 @@ const char *sal_address_get_display_name(const SalAddress* addr){
        return null_if_empty(u->displayname);
 }
 
+char *sal_address_get_display_name_unquoted(const SalAddress *addr){
+       const osip_from_t *u=(const osip_from_t*)addr;
+       const char *dn=null_if_empty(u->displayname);
+       char *ret=NULL;
+       if (dn!=NULL) {
+               char *tmp=osip_strdup_without_quote(dn);
+               ret=ms_strdup(tmp);
+               osip_free(tmp);
+       }
+       return ret;
+}
+
 const char *sal_address_get_username(const SalAddress *addr){
        const osip_from_t *u=(const osip_from_t*)addr;
        return null_if_empty(u->url->username);
@@ -1637,8 +1660,10 @@ void sal_address_set_display_name(SalAddress *addr, const char *display_name){
                osip_free(u->displayname);
                u->displayname=NULL;
        }
-       if (display_name!=NULL)
+       if (display_name!=NULL && display_name[0]!='\0'){
                u->displayname=osip_strdup(display_name);
+               sal_address_quote_displayname(addr);
+       }
 }
 
 void sal_address_set_username(SalAddress *addr, const char *username){
@@ -1706,6 +1731,9 @@ char *sal_address_as_string_uri_only(const SalAddress *u){
 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
index d4fddf871d3e6e39fd8f1b2a7a905e44807af09a..ecb3ee96337015938f8fc4babd3266f201b04999 100644 (file)
@@ -308,7 +308,7 @@ void linphone_gtk_show_friends(void){
                LinphoneFriend *lf=(LinphoneFriend*)itf->data;
                const LinphoneAddress *f_uri=linphone_friend_get_address(lf);
                char *uri=linphone_address_as_string(f_uri);
-               const char *name=linphone_address_get_display_name(f_uri);
+               char *name=linphone_address_get_display_name_unquoted (f_uri);
                const char *display=name;
                char *escaped=NULL;
                if (lookup){
@@ -341,6 +341,7 @@ void linphone_gtk_show_friends(void){
                        }
                }
                ms_free(uri);
+               if (name!=NULL) ms_free(name);
        }
 }
 
@@ -372,16 +373,17 @@ void linphone_gtk_remove_contact(GtkWidget *button){
 void linphone_gtk_show_contact(LinphoneFriend *lf){
        GtkWidget *w=linphone_gtk_create_window("contact");
        char *uri;
-       const char *name;
+       char *name;
        const LinphoneAddress *f_uri=linphone_friend_get_address(lf);
        uri=linphone_address_as_string_uri_only(f_uri);
-       name=linphone_address_get_display_name(f_uri);
+       name=linphone_address_get_display_name_unquoted (f_uri);
        if (uri) {
                gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"sip_address")),uri);
                ms_free(uri);
        }
        if (name){
                gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"name")),name);
+               ms_free(name);
        }
        gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"show_presence")),
                                        linphone_friend_get_send_subscribe(lf));
index c3da047e10b3ad184f391e12cbfa4f65cb281a32..10565e6c18cba71e55027b16cdc2f0cc156c172a 100644 (file)
@@ -72,7 +72,7 @@ void linphone_gtk_show_idle_view(void){
 
 void display_peer_name_in_label(GtkWidget *label, const char *uri){
        LinphoneAddress *from;
-       const char *displayname=NULL;
+       char *displayname=NULL;
        char *id=NULL;
        char *uri_label;
 
@@ -83,18 +83,15 @@ void display_peer_name_in_label(GtkWidget *label, const char *uri){
 
        from=linphone_address_new(uri);
        if (from!=NULL){
-               
-               if (linphone_address_get_display_name(from))
-                       displayname=linphone_address_get_display_name(from);
-
+               displayname=linphone_address_get_display_name_unquoted (from);
                id=linphone_address_as_string_uri_only(from);
-
        }else id=ms_strdup(uri);
 
-       if (displayname!=NULL)
+       if (displayname!=NULL){
                uri_label=g_markup_printf_escaped("<span size=\"large\">%s</span>\n<i>%s</i>", 
                        displayname,id);
-       else
+               ms_free(displayname);
+       }else
                uri_label=g_markup_printf_escaped("<span size=\"large\"><i>%s</i></span>\n",id);
        gtk_label_set_markup(GTK_LABEL(label),uri_label);
        ms_free(id);
index 87db8fb2a4889c2c28e263003b6d981f056f0a4d..822e618d1b8c000eb84e0564b0e10a5c5efb619e 100644 (file)
@@ -395,7 +395,7 @@ static void set_video_window_decorations(GdkWindow *w){
 
                linphone_address_clean(uri);
                if (linphone_address_get_display_name(uri)!=NULL){
-                       display_name=ms_strdup(linphone_address_get_display_name(uri));
+                       display_name=linphone_address_get_display_name_unquoted (uri);
                }else{
                        display_name=linphone_address_as_string(uri);
                }
index 85ebdbb8dad2d8bf294ff3e135a4d00fa75430f3..3faf28dabdc6e66adb801cb94348c3d05c1360cc 100644 (file)
@@ -802,8 +802,11 @@ void linphone_gtk_show_parameters(void){
        /* SIP CONFIG */
        contact=linphone_core_get_primary_contact_parsed(lc);
        if (contact){
-               if (linphone_address_get_display_name(contact)) 
-                       gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(pb,"displayname")),linphone_address_get_display_name(contact));
+               if (linphone_address_get_display_name(contact)) {
+                       char *dn=linphone_address_get_display_name_unquoted (contact);
+                       gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(pb,"displayname")),dn);
+                       ms_free(dn);
+               }
                if (linphone_address_get_username(contact))
                        gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(pb,"username")),linphone_address_get_username(contact));
        }
index 927c9596e2c5a4517510795bc918394abddb139e..e02b193510d21dfa3219940e2ab2c3e4a89e93ad 100644 (file)
@@ -130,8 +130,9 @@ public interface LinphoneCore {
         * {@link LinphoneCoreListener#inviteReceived(LinphoneCore, String)} listener.
         * The application can later respond positively to the call using
         * this method.
+        * @throws LinphoneCoreException 
         */
-       public void acceptCall();
+       public void acceptCall() throws LinphoneCoreException;
        
        
        /**
index b267373a3eadef9df2ef2ef2cbf5e194d1b882a6..b3e2952fb702f9695a6a3e34095e1c6afd323e3f 100644 (file)
@@ -60,5 +60,6 @@ abstract public class LinphoneCoreFactory {
         * @param enable 
         */
        abstract public  void setDebugMode(boolean enable);
-
+       
+       abstract public void setLogHandler(LinphoneLogHandler handler);
 }
diff --git a/java/common/org/linphone/core/LinphoneLogHandler.java b/java/common/org/linphone/core/LinphoneLogHandler.java
new file mode 100644 (file)
index 0000000..d1330a4
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+LinphoneLogHandler.java
+Copyright (C) 2010  Belledonne Communications, Grenoble, France
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/
+package org.linphone.core;
+
+public interface LinphoneLogHandler {
+       public static final int Fatal=1<<4;
+       public static final int Error=1<<3|Fatal;
+       public static final int Warn=1<<2|Error;
+       public static final int Info=1<<1|Warn;
+       public static final int Debug=1|Info;
+       
+       public void log(String loggerName, int level, String levelString, String msg, Throwable e);
+}
index 105224ee45555edbce39add954d55a1d05064d71..9ebb98fada4d7628c132b8c2df5e92c73df0c2df 100644 (file)
@@ -30,6 +30,7 @@ public class LinphoneCoreException extends Exception {
 
        }
        public LinphoneCoreException(Throwable e) {
+               this(e.getClass().getName()+" "+ e.getMessage());
                mE = e;
        }
 
@@ -40,7 +41,7 @@ public class LinphoneCoreException extends Exception {
 
        public void printStackTrace() {
                super.printStackTrace();
-               mE.printStackTrace();
+               if (mE!=null) mE.printStackTrace();
        }
        
 
index 66401f8172191ab3f2b7d8c8afd56ab4b77f848f..4c792a11f362e4cd706a45679f0cff11b133e120 100644 (file)
@@ -67,5 +67,6 @@ mediastreamer2/src/ice.c
 mediastreamer2/src/void.c
 mediastreamer2/src/equalizer.c
 mediastreamer2/src/msdscap-mingw.cc
+mediastreamer2/src/drawdib-display.c