]> sjero.net Git - linphone/commitdiff
Merge branch 'master' into tunnel
authorJehan Monnier <jehan.monnier@linphone.org>
Thu, 22 Dec 2011 10:13:08 +0000 (11:13 +0100)
committerJehan Monnier <jehan.monnier@linphone.org>
Thu, 22 Dec 2011 10:13:08 +0000 (11:13 +0100)
13 files changed:
configure.ac
coreapi/conference.c
coreapi/linphone_tunnel_manager.cc
coreapi/linphone_tunnel_manager.h
coreapi/linphonecall.c
coreapi/linphonecore.c
coreapi/linphonecore_jni.cc
coreapi/private.h
coreapi/sal_eXosip2.c
gtk/propertybox.c
mediastreamer2
oRTP
po/de.po

index 94e23c59d30ae1c45561707c80df6feb47dd6e65..89e0f230b58a886ea29badd1fd39431b167cd8b9 100644 (file)
@@ -1,6 +1,6 @@
 dnl Process this file with autoconf to produce a configure script.
 
-AC_INIT([linphone],[3.5],[linphone-developers@nongnu.org])
+AC_INIT([linphone],[3.5.0],[linphone-developers@nongnu.org])
 AC_CANONICAL_SYSTEM
 AC_CONFIG_SRCDIR([coreapi/linphonecore.c])
 
index 63f6369e9d4eb5143da3f5690270919dbfc97b86..aafed5d606c5351f192b041282979e6134422009 100644 (file)
@@ -28,6 +28,8 @@
 
 #include "mediastreamer2/msvolume.h"
 
+static int convert_conference_to_call(LinphoneCore *lc);
+
 static void conference_check_init(LinphoneConference *ctx, int samplerate){
        if (ctx->conf==NULL){
                MSAudioConferenceParams params;
@@ -48,24 +50,22 @@ static void remove_local_endpoint(LinphoneConference *ctx){
 }
 
 static int remote_participants_count(LinphoneConference *ctx) {
-       if (!ctx->conf || ctx->conf->nmembers==0) return 0;
-       if (!ctx->local_participant) return ctx->conf->nmembers;
-       return ctx->conf->nmembers -1;
+       if (!ctx->conf || ms_audio_conference_get_size(ctx->conf)==0) return 0;
+       if (!ctx->local_participant) return ms_audio_conference_get_size(ctx->conf);
+       return ms_audio_conference_get_size(ctx->conf) -1;
 }
 
-static int convert_conference_to_call(LinphoneCore *lc);
 void linphone_core_conference_check_uninit(LinphoneCore *lc){
        LinphoneConference *ctx=&lc->conf_ctx;
        if (ctx->conf){
-               ms_message("conference_check_uninit(): nmembers=%i",ctx->conf->nmembers);
+               ms_message("conference_check_uninit(): nmembers=%i",ms_audio_conference_get_size(ctx->conf));
                if (remote_participants_count(ctx)==1){
                        convert_conference_to_call(lc);
                }
-               if (ctx->conf->nmembers==1)
-               if (ctx->conf->nmembers==1 && ctx->local_participant!=NULL){
+               if (ms_audio_conference_get_size(ctx->conf)==1 && ctx->local_participant!=NULL){
                        remove_local_endpoint(ctx);
                }
-               if (ctx->conf->nmembers==0){
+               if (ms_audio_conference_get_size(ctx->conf)==0){
                        ms_audio_conference_destroy(ctx->conf);
                        ctx->conf=NULL;
                }
@@ -298,5 +298,5 @@ int linphone_core_terminate_conference(LinphoneCore *lc) {
 }
 
 int linphone_core_get_conference_size(LinphoneCore *lc) {
-       return ms_audio_conference_size(lc->conf_ctx.conf);
+       return ms_audio_conference_get_size(lc->conf_ctx.conf);
 }
index 0bf2efa3ff500f9475d7ad584eecce4958502a48..6578b74950b52e71393d9177a27cbe8814937e7d 100644 (file)
 #include "private.h"
 #include "lpconfig.h"
 
-static inline belledonnecomm::TunnelManager *bcTunnel(LinphoneTunnelManager *tunnel){
+static inline belledonnecomm::TunnelManager *bcTunnel(LinphoneTunnel *tunnel){
        return (belledonnecomm::TunnelManager *)tunnel;
 }
 
-extern "C" LinphoneTunnelManager* linphone_core_tunnel_new(LinphoneCore *lc){
-       LinphoneTunnelManager* tunnel= (LinphoneTunnelManager*) new belledonnecomm::TunnelManager(lc);
+extern "C" LinphoneTunnel* linphone_core_tunnel_new(LinphoneCore *lc){
+       LinphoneTunnel* tunnel= (LinphoneTunnel*) new belledonnecomm::TunnelManager(lc);
        return tunnel;
 }
 
-LinphoneTunnelManager* linphone_tunnel_get(LinphoneCore *lc){
+LinphoneTunnel* linphone_tunnel_get(LinphoneCore *lc){
        return lc->tunnel;
 }
 
-void linphone_tunnel_destroy(LinphoneTunnelManager *tunnel){
+void linphone_tunnel_destroy(LinphoneTunnel *tunnel){
        delete bcTunnel(tunnel);
 }
 
-void linphone_tunnel_add_server(LinphoneTunnelManager *tunnel, const char *host, int port){
+void linphone_tunnel_add_server(LinphoneTunnel *tunnel, const char *host, int port){
        bcTunnel(tunnel)->addServer(host, port);
 }
 
-void linphone_tunnel_add_server_and_mirror(LinphoneTunnelManager *tunnel, const char *host, int port, int remote_udp_mirror, int delay){
+void linphone_tunnel_add_server_and_mirror(LinphoneTunnel *tunnel, const char *host, int port, int remote_udp_mirror, int delay){
        bcTunnel(tunnel)->addServer(host, port, remote_udp_mirror, delay);
 }
 
-void linphone_tunnel_clean_servers(LinphoneTunnelManager *tunnel){
+void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel){
        bcTunnel(tunnel)->cleanServers();
 }
 
-void linphone_tunnel_enable(LinphoneTunnelManager *tunnel, bool_t enabled){
+void linphone_tunnel_enable(LinphoneTunnel *tunnel, bool_t enabled){
        bcTunnel(tunnel)->enable(enabled);
 }
 
-bool_t linphone_tunnel_enabled(LinphoneTunnelManager *tunnel){
+bool_t linphone_tunnel_enabled(LinphoneTunnel *tunnel){
        return bcTunnel(tunnel)->isEnabled();
 }
 
-void linphone_tunnel_enable_logs(LinphoneTunnelManager *tunnel, bool_t enabled){
+void linphone_tunnel_enable_logs(LinphoneTunnel *tunnel, bool_t enabled){
        bcTunnel(tunnel)->enableLogs(enabled);
 }
 
-void linphone_tunnel_enable_logs_with_handler(LinphoneTunnelManager *tunnel, bool_t enabled, LogHandler logHandler){
+void linphone_tunnel_enable_logs_with_handler(LinphoneTunnel *tunnel, bool_t enabled, LogHandler logHandler){
        bcTunnel(tunnel)->enableLogs(enabled, logHandler);
 }
 
-void linphone_tunnel_set_http_proxy_auth_info(LinphoneTunnelManager *tunnel, const char* username,const char* passwd){
+void linphone_tunnel_set_http_proxy_auth_info(LinphoneTunnel *tunnel, const char* username,const char* passwd){
        bcTunnel(tunnel)->setHttpProxyAuthInfo(username, passwd);
 }
 
-void linphone_tunnel_reconnect(LinphoneTunnelManager *tunnel){
+void linphone_tunnel_reconnect(LinphoneTunnel *tunnel){
        bcTunnel(tunnel)->reconnect();
 }
 
-void linphone_tunnel_auto_detect(LinphoneTunnelManager *tunnel){
+void linphone_tunnel_auto_detect(LinphoneTunnel *tunnel){
        bcTunnel(tunnel)->autoDetect();
 }
 
 
-static inline _LpConfig *config(LinphoneTunnelManager *tunnel){
+static inline _LpConfig *config(LinphoneTunnel *tunnel){
        return ((belledonnecomm::TunnelManager *)tunnel)->getLinphoneCore()->config;
 }
 
 /**
  * Set tunnel server addresses. "host1:port1 host2:port2 host3:port3"
 **/
-void linphone_tunnel_set_server_addresses(LinphoneTunnelManager *tunnel, const char *addresses){
+void linphone_tunnel_set_server_addresses(LinphoneTunnel *tunnel, const char *addresses){
        lp_config_set_string(config(tunnel),"tunnel","server_addresses",addresses);
 }
 
 /**
  * Get tunnel server addresses. "host1:port1 host2:port2 host3:port3"
 **/
-const char *linphone_tunnel_get_server_addresses(LinphoneTunnelManager *tunnel){
+const char *linphone_tunnel_get_server_addresses(LinphoneTunnel *tunnel){
        return lp_config_get_string(config(tunnel),"tunnel","server_addresses", NULL);
 }
 
 /**
  * Set tunnel state.
 **/
-void linphone_tunnel_set_state(LinphoneTunnelManager *tunnel, LinphoneTunnelState state){
+void linphone_tunnel_set_state(LinphoneTunnel *tunnel, LinphoneTunnelState state){
        switch (state) {
                case LinphoneTunnelEnabled:
                        lp_config_set_string(config(tunnel),"tunnel","tunnel_state","enabled");
@@ -126,7 +126,7 @@ void linphone_tunnel_set_state(LinphoneTunnelManager *tunnel, LinphoneTunnelStat
 /**
  * Get tunnel state.
 **/
-LinphoneTunnelState linphone_tunnel_get_state(LinphoneTunnelManager *tunnel){
+LinphoneTunnelState linphone_tunnel_get_state(LinphoneTunnel *tunnel){
        const char *state=lp_config_get_string(config(tunnel),"tunnel","tunnel_state","disabled");
        if (0==strcmp("enabled", state)){
                return LinphoneTunnelEnabled;
index 2569534e7ddc76bec71a71b7f8a7364f9c5ffbf5..45e0db16780a241ade7d26f16d426139f887bbd2 100644 (file)
@@ -33,21 +33,21 @@ extern "C"
 {
 #endif
 
-typedef struct LinphoneTunnelManager LinphoneTunnelManager;
+typedef struct LinphoneTunnel LinphoneTunnel;
 typedef void (*LogHandler)(int log_level, const char *str, va_list l);
 
 
-LinphoneTunnelManager *linphone_tunnel_get(LinphoneCore *lc);
-void linphone_tunnel_destroy(LinphoneTunnelManager *tunnel);
-void linphone_tunnel_add_server(LinphoneTunnelManager *tunnel, const char *host, int port);
-void linphone_tunnel_add_server_and_mirror(LinphoneTunnelManager *tunnel, const char *host, int port, int remote_udp_mirror, int delay);
-void linphone_tunnel_clean_servers(LinphoneTunnelManager *tunnel);
-void linphone_tunnel_enable(LinphoneTunnelManager *tunnel, bool_t enabled);
-bool_t linphone_tunnel_enabled(LinphoneTunnelManager *tunnel);
-void linphone_tunnel_enable_logs(LinphoneTunnelManager *tunnel, bool_t enabled);
-void linphone_tunnel_enable_logs_with_handler(LinphoneTunnelManager *tunnel, bool_t enabled, LogHandler logHandler);
-void linphone_tunnel_reconnect(LinphoneTunnelManager *tunnel);
-void linphone_tunnel_auto_detect(LinphoneTunnelManager *tunnel);
+LinphoneTunnel *linphone_tunnel_get(LinphoneCore *lc);
+
+void linphone_tunnel_add_server(LinphoneTunnel *tunnel, const char *host, int port);
+void linphone_tunnel_add_server_and_mirror(LinphoneTunnel *tunnel, const char *host, int port, int remote_udp_mirror, int delay);
+void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel);
+void linphone_tunnel_enable(LinphoneTunnel *tunnel, bool_t enabled);
+bool_t linphone_tunnel_enabled(LinphoneTunnel *tunnel);
+void linphone_tunnel_enable_logs(LinphoneTunnel *tunnel, bool_t enabled);
+void linphone_tunnel_enable_logs_with_handler(LinphoneTunnel *tunnel, bool_t enabled, LogHandler logHandler);
+void linphone_tunnel_reconnect(LinphoneTunnel *tunnel);
+void linphone_tunnel_auto_detect(LinphoneTunnel *tunnel);
 void linphone_tunnel_set_http_proxy_auth_info(const char* username,const char* passwd);
 
 
@@ -63,22 +63,22 @@ typedef enum _LinphoneTunnelState{
 /**
  * Set tunnel addresses.
 **/
-void linphone_tunnel_set_server_addresses(LinphoneTunnelManager *tunnel, const char *lists);
+void linphone_tunnel_set_server_addresses(LinphoneTunnel *tunnel, const char *lists);
 
 /**
  * Get tunnel addresses.
 **/
-const char *linphone_tunnel_get_server_addresses(LinphoneTunnelManager *tunnel);
+const char *linphone_tunnel_get_server_addresses(LinphoneTunnel *tunnel);
 
 /**
  * Set tunnel state.
 **/
-void linphone_tunnel_set_state(LinphoneTunnelManager *tunnel, LinphoneTunnelState state);
+void linphone_tunnel_set_state(LinphoneTunnel *tunnel, LinphoneTunnelState state);
 
 /**
  * Get tunnel state.
 **/
-LinphoneTunnelState linphone_tunnel_get_state(LinphoneTunnelManager *tunnel);
+LinphoneTunnelState linphone_tunnel_get_state(LinphoneTunnel *tunnel);
 
 
 #ifdef __cplusplus
index d8a2db81730cdd1f80e3a214177c17efcd3f7c0f..15672211fb86f5b9354fe3aa6225e51e5c9b5943 100644 (file)
@@ -349,7 +349,7 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro
                /*the following sends an option request back to the caller so that
                 we get a chance to discover our nat'd address before answering.*/
                call->ping_op=sal_op_new(lc->sal);
-               from_str=linphone_address_as_string(from);
+               from_str=linphone_address_as_string_uri_only(from);
                sal_op_set_route(call->ping_op,sal_op_get_network_origin(call->op));
                sal_op_set_user_pointer(call->ping_op,call);
                sal_ping(call->ping_op,linphone_core_find_best_identity(lc,from,NULL),from_str);
index ecbd18f28a5d9ed21568984bad19bfe8bee95863..30f5997628c1ef3438b5fd52dd9a3d183d4b11f6 100644 (file)
@@ -998,7 +998,7 @@ static void misc_config_read (LinphoneCore *lc) {
 }
 
 #ifdef TUNNEL_ENABLED
-static void tunnel_add_servers_from_config(LinphoneTunnelManager *tunnel, const char* confaddress){
+static void tunnel_add_servers_from_config(LinphoneTunnel *tunnel, const char* confaddress){
        char *addresses=(char*)ms_strdup(confaddress);
        char *str1;
        for(str1=addresses;;str1=NULL){
@@ -3801,6 +3801,9 @@ static MSFilter *get_dtmf_gen(LinphoneCore *lc){
        if (lc->ringstream==NULL){
                float amp=0.1;
                MSSndCard *ringcard=lc->sound_conf.lsd_card ?lc->sound_conf.lsd_card : lc->sound_conf.ring_sndcard;
+               if (ringcard == NULL)
+                       return NULL;
+
                lc->ringstream=ring_start(NULL,0,ringcard);
                ms_filter_call_method(lc->ringstream->gendtmf,MS_DTMF_GEN_SET_DEFAULT_AMPLITUDE,&amp);
                lc->dmfs_playing_start_time=time(NULL);
index eca9152f40716090cd976ccdabc0bc2ed0c66ddf..0396fcd4850e0ea154105681ab11ed89747ac6c9 100644 (file)
@@ -1599,7 +1599,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setMaxCalls(JNIEnv *env,
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelAddServerAndMirror(JNIEnv *env,jobject thiz,jlong pCore,
                jstring jHost, jint port, jint mirror, jint delay) {
 #ifdef TUNNEL_ENABLED
-       LinphoneTunnelManager *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
+       LinphoneTunnel *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
        const char* cHost=env->GetStringUTFChars(jHost, NULL);
        linphone_tunnel_add_server_and_mirror(tunnel, cHost, port, mirror, delay);
        env->ReleaseStringUTFChars(jHost, cHost);
@@ -1608,28 +1608,28 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelAddServerAndMirror
 
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelAutoDetect(JNIEnv *env,jobject thiz,jlong pCore) {
 #ifdef TUNNEL_ENABLED
-       LinphoneTunnelManager *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
+       LinphoneTunnel *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
        linphone_tunnel_auto_detect(tunnel);
 #endif
 }
 
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelCleanServers(JNIEnv *env,jobject thiz,jlong pCore) {
 #ifdef TUNNEL_ENABLED
-       LinphoneTunnelManager *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
+       LinphoneTunnel *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
        linphone_tunnel_clean_servers(tunnel);
 #endif
 }
 
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelEnable(JNIEnv *env,jobject thiz,jlong pCore, jboolean enable) {
 #ifdef TUNNEL_ENABLED
-       LinphoneTunnelManager *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
+       LinphoneTunnel *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
        linphone_tunnel_enable(tunnel, enable);
 #endif
 }
 
 extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelEnableLogs(JNIEnv *env,jobject thiz,jlong pCore, jboolean enable) {
 #ifdef TUNNEL_ENABLED
-       LinphoneTunnelManager *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
+       LinphoneTunnel *tunnel=((LinphoneCore *) pCore)->tunnel; if (!tunnel) return;
        linphone_tunnel_enable_logs(tunnel, enable);
 #endif
 }
index bda52f016c9ce8ddf9207d685733fc3426651d1e..987dd7951d749291f7bd1119b01ca72a3ebf7ded 100644 (file)
@@ -476,11 +476,12 @@ struct _LinphoneCore
        int device_rotation;
        bool_t ringstream_autorelease;
        int max_calls;
-       LinphoneTunnelManager *tunnel;
+       LinphoneTunnel *tunnel;
 };
 
-LinphoneTunnelManager *linphone_core_tunnel_new(LinphoneCore *lc);
-
+LinphoneTunnel *linphone_core_tunnel_new(LinphoneCore *lc);
+void linphone_tunnel_destroy(LinphoneTunnel *tunnel);
+       
 bool_t linphone_core_can_we_add_call(LinphoneCore *lc);
 int linphone_core_add_call( LinphoneCore *lc, LinphoneCall *call);
 int linphone_core_del_call( LinphoneCore *lc, LinphoneCall *call);
@@ -544,6 +545,8 @@ void __linphone_core_invalidate_registers(LinphoneCore* lc);
 #endif
 void call_logs_write_to_config_file(LinphoneCore *lc);
 
+
+
 #ifdef __cplusplus
 }
 #endif
index cc747d9a52f7f94e9a0c990d626c9dfcbf7320d3..533fa860abd0cc53111ed1f892948ffe12fcbfcf 100644 (file)
@@ -722,6 +722,7 @@ int sal_ping(SalOp *op, const char *from, const char *to){
        
        sal_op_set_from(op,from);
        sal_op_set_to(op,to);
+
        /*bug here: eXosip2 does not honor the route argument*/
        eXosip_options_build_request (&options, sal_op_get_to(op),
                        sal_op_get_from(op),sal_op_get_route(op));
index 7c414dc835ea6e767f39e9b6be378c4ebdfea857..0e69550cd2d09e8fc272e745bd52ab19acfb83f1 100644 (file)
@@ -1004,7 +1004,7 @@ void linphone_gtk_edit_tunnel_closed(GtkWidget *button){
 }
 
 #ifdef TUNNEL_ENABLED
-static void tunnel_get_server_host_and_port(LinphoneTunnelManager *tunnel, char *host, int size, int *port){
+static void tunnel_get_server_host_and_port(LinphoneTunnel *tunnel, char *host, int size, int *port){
        char *colon;
         char *addresses=(char*)ms_strdup(linphone_tunnel_get_server_addresses(tunnel));
        char *str1=addresses;
@@ -1023,7 +1023,7 @@ void linphone_gtk_edit_tunnel(GtkButton *button){
 #ifdef TUNNEL_ENABLED
        LinphoneCore *lc=linphone_gtk_get_core();
        GtkWidget *w=linphone_gtk_create_window("tunnel_config");
-       LinphoneTunnelManager *tunnel=linphone_tunnel_get(lc);
+       LinphoneTunnel *tunnel=linphone_tunnel_get(lc);
        char host[50]={'\0'};
        int port=0;
        tunnel_get_server_host_and_port(tunnel, host, sizeof(host), &port);
@@ -1050,7 +1050,7 @@ void linphone_gtk_tunnel_ok(GtkButton *button){
        LinphoneCore *lc=linphone_gtk_get_core();
        GtkWidget *w=gtk_widget_get_toplevel(GTK_WIDGET(button));
        char address[50]={'\0'};
-       LinphoneTunnelManager *tunnel=linphone_tunnel_get(lc);
+       LinphoneTunnel *tunnel=linphone_tunnel_get(lc);
 
        gint port = (gint)gtk_spin_button_get_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"port")));
        gboolean enabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"radio_enable")));
index 698cadf4ed473f4d1291238852492222209916da..c1f6d3e6d4f36928fffd2e7380759544bcd23d84 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 698cadf4ed473f4d1291238852492222209916da
+Subproject commit c1f6d3e6d4f36928fffd2e7380759544bcd23d84
diff --git a/oRTP b/oRTP
index cb6bd1b8684d94d473bed38dd02029bd3a48df6e..73dff1e14c73e76e5d46f617a320389e29606ffd 160000 (submodule)
--- a/oRTP
+++ b/oRTP
@@ -1 +1 @@
-Subproject commit cb6bd1b8684d94d473bed38dd02029bd3a48df6e
+Subproject commit 73dff1e14c73e76e5d46f617a320389e29606ffd
index 06e280eebca5dd7e967cc3dcc570d5c8ed75290e..e6f37d706878a4bc65172cdef198ac28a4a4deb8 100644 (file)
--- a/po/de.po
+++ b/po/de.po
@@ -6,8 +6,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: linphone 0.7.1\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-12-05 12:41+0100\n"
-"PO-Revision-Date: 2011-11-27 23:42+0100\n"
+"POT-Creation-Date: 2011-12-10 01:18+0100\n"
+"PO-Revision-Date: 2011-12-10 01:28+0100\n"
 "Last-Translator: Gerhard Stengel <gstengel@gmx.net>\n"
 "Language-Team: German <kde-i18n-de@kde.org>\n"
 "Language: \n"
@@ -21,15 +21,15 @@ msgstr ""
 #, c-format
 msgid "%i minute"
 msgid_plural "%i minutes"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%i Minute"
+msgstr[1] "%i Minuten"
 
 #: ../gtk/calllogs.c:74
 #, c-format
 msgid "%i second"
 msgid_plural "%i seconds"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%i Sekunde"
+msgstr[1] "%i Sekunden"
 
 #: ../gtk/calllogs.c:77
 #, c-format
@@ -37,6 +37,8 @@ msgid ""
 "<big><b>%s</b></big>\t<small><i>%s</i>\t<i>Quality: %s</i></small>\n"
 "%s\t%s %s\t"
 msgstr ""
+"<big><b>%s</b></big>\t<small><i>%s</i>\t<i>Qualität: %s</i></small>\n"
+"%s\t%s %s\t"
 
 #: ../gtk/calllogs.c:79
 msgid "n/a"
@@ -644,9 +646,8 @@ msgid "C"
 msgstr ""
 
 #: ../gtk/main.ui.h:24
-#, fuzzy
 msgid "Call"
-msgstr "„%s“ anrufen"
+msgstr "Anrufen"
 
 #: ../gtk/main.ui.h:25
 msgid "Call quality rating"