diff --git a/.gitignore b/.gitignore index f20d4b31c..9420623d0 100644 --- a/.gitignore +++ b/.gitignore @@ -87,3 +87,9 @@ po/linphone.pot .tx/linphone-gtk.audio-assistantdesktopin/ tester/linphone_log.gz.txt tools/auto_answer +tools/lp-autoanswer +build/macos/pkg-distribution.xml +tester/record_for_lc_*.wav +tester/record-call_with_file_player.wav +tester/ZIDCache*.xml + diff --git a/CMakeLists.txt b/CMakeLists.txt index 46629c8ad..b6c1d4a04 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -26,18 +26,20 @@ project(LINPHONE C CXX) set(LINPHONE_MAJOR_VERSION "3") set(LINPHONE_MINOR_VERSION "8") -set(LINPHONE_MICRO_VERSION "1") +set(LINPHONE_MICRO_VERSION "2") set(LINPHONE_VERSION "${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}") -set(LINPHONE_SO_VERSION "6") - -set(LINPHONE_ALL_LANGS "cs de es fr he hu it ja nb_NO nl pl pt_BR ru sr sv zh_CN zh_TW") +set(LINPHONE_SO_VERSION "7") +file(GLOB LINPHONE_PO_FILES RELATIVE "${CMAKE_SOURCE_DIR}/po" "${CMAKE_SOURCE_DIR}/po/*.po") +string(REGEX REPLACE "([a-zA-Z_]+)\\.po" "\\1" LINPHONE_ALL_LANGS_LIST "${LINPHONE_PO_FILES}") +string(REPLACE ";" " " LINPHONE_ALL_LANGS "${LINPHONE_ALL_LANGS_LIST}") include(CMakeDependentOption) option(ENABLE_STATIC "Build static library (default is shared library)." NO) option(ENABLE_CONSOLE_UI "Turn on or off compilation of console interface." YES) option(ENABLE_DATE "Use build date in internal version number." NO) +option(ENABLE_DOC "Enable documentation generation with Doxygen." YES) option(ENABLE_GTK_UI "Turn on or off compilation of gtk interface." YES) option(ENABLE_LDAP "Enable LDAP support." NO) option(ENABLE_MSG_STORAGE "Turn on compilation of message storage." YES) @@ -216,6 +218,9 @@ endif() add_subdirectory(coreapi) add_subdirectory(share) +if(ENABLE_CONSOLE_UI) + add_subdirectory(console) +endif() if(ENABLE_GTK_UI) add_subdirectory(gtk) add_subdirectory(pixmaps) diff --git a/COPYING b/COPYING index b18ab0474..365b8c279 100644 --- a/COPYING +++ b/COPYING @@ -338,3 +338,107 @@ proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + + +------------------------------------------------------------------------------- + + +------------------------------------------------------- +About The Cisco-Provided Binary of OpenH264 Video Codec +------------------------------------------------------- + +Cisco provides this program under the terms of the BSD license. + +Additionally, this binary is licensed under Cisco’s AVC/H.264 Patent Portfolio +License from MPEG LA, at no cost to you, provided that the requirements and +conditions shown below in the AVC/H.264 Patent Portfolio sections are met. + +As with all AVC/H.264 codecs, you may also obtain your own patent license from +MPEG LA or from the individual patent owners, or proceed at your own risk. +Your rights from Cisco under the BSD license are not affected by this choice. + +For more information on the OpenH264 binary licensing, please see the OpenH264 +FAQ found at http://www.openh264.org/faq.html#binary + +A corresponding source code to this binary program is available under the same +BSD terms, which can be found at http://www.openh264.org + +----------- +BSD License +----------- + +Copyright © 2014 Cisco Systems, Inc. + +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, +this list of conditions and the following disclaimer in the documentation +and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +----------------------------------------- +AVC/H.264 Patent Portfolio License Notice +----------------------------------------- + +The binary form of this Software is distributed by Cisco under the AVC/H.264 +Patent Portfolio License from MPEG LA, and is subject to the following +requirements, which may or may not be applicable to your use of this software: + +THIS PRODUCT IS LICENSED UNDER THE AVC PATENT PORTFOLIO LICENSE FOR THE +PERSONAL USE OF A CONSUMER OR OTHER USES IN WHICH IT DOES NOT RECEIVE +REMUNERATION TO (i) ENCODE VIDEO IN COMPLIANCE WITH THE AVC STANDARD +(“AVC VIDEO”) AND/OR (ii) DECODE AVC VIDEO THAT WAS ENCODED BY A CONSUMER +ENGAGED IN A PERSONAL ACTIVITY AND/OR WAS OBTAINED FROM A VIDEO PROVIDER +LICENSED TO PROVIDE AVC VIDEO. NO LICENSE IS GRANTED OR SHALL BE IMPLIED FOR +ANY OTHER USE. ADDITIONAL INFORMATION MAY BE OBTAINED FROM MPEG LA, L.L.C. SEE +HTTP://WWW.MPEGLA.COM + +Accordingly, please be advised that content providers and broadcasters using +AVC/H.264 in their service may be required to obtain a separate use license +from MPEG LA, referred to as "(b) sublicenses" in the SUMMARY OF AVC/H.264 +LICENSE TERMS from MPEG LA found at http://www.openh264.org/mpegla + +--------------------------------------------- +AVC/H.264 Patent Portfolio License Conditions +--------------------------------------------- + +In addition, the Cisco-provided binary of this Software is licensed under +Cisco's license from MPEG LA only if the following conditions are met: + +1. The Cisco-provided binary is separately downloaded to an end user’s device, +and not integrated into or combined with third party software prior to being +downloaded to the end user’s device; + +2. The end user must have the ability to control (e.g., to enable, disable, or +re-enable) the use of the Cisco-provided binary; + +3. Third party software, in the location where end users can control the use of +the Cisco-provided binary, must display the following text: + + "OpenH264 Video Codec provided by Cisco Systems, Inc." + +4. Any third-party software that makes use of the Cisco-provided binary must +reproduce all of the above text, as well as this last condition, in the EULA +and/or in another location where licensing information is to be presented to +the end user. + + + + v1.0 + diff --git a/Makefile.am b/Makefile.am index 6d8ead01c..c8b69eec2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -209,6 +209,7 @@ Portfile-devel: $(top_srcdir)/scripts/Portfile-devel.tmpl dist MACAPPNAME=Linphone.app MACAPPZIP=$(PACKAGE)-$(GITVERSION).app.zip MACAPPDMG=$(PACKAGE)-$(GITVERSION).dmg +MACAPPPKG=$(PACKAGE)-$(GITVERSION).pkg BUNDLEPREFIX=./ BUNDLEDIR=$(BUNDLEPREFIX)$(MACAPPNAME) #a path prefix where additional libs can be cherry-picked by the bundler. @@ -229,15 +230,29 @@ Linphone.app: cp -f $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules.orig sed -e 's:@executable_path.*/::g' $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules.orig > $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules patch -R ${BUNDLEDIR}/Contents/Resources/share/themes/Quartz/gtk-2.0/gtkrc ${srcdir}/build/macos/quartz-theme-gtkrc.patch + rm -f ${BUNDLEDIR}/Contents/Resources/lib/libopenh264* -bundle: Linphone.app +bundle: $(MACAPPNAME) cd $(BUNDLEDIR)/.. && rm -f $(MACAPPZIP) && zip -r $(MACAPPZIP) $(MACAPPNAME) && cd - cd $(BUNDLEDIR)/.. && rm -f $(MAXAPPDMG) && hdiutil create $(MACAPPDMG) -srcfolder $(MACAPPNAME) -ov && cd - -signed-bundle: Linphone.app - codesign --deep -s $(BUNDLE_SIGNING_ID) $(BUNDLEDIR) +signed-bundle: $(MACAPPNAME) + codesign --deep -s "$(BUNDLE_SIGNING_ID)" $(BUNDLEDIR) cd $(BUNDLEDIR)/.. && rm -f $(MAXAPPDMG) && hdiutil create $(MACAPPDMG) -srcfolder $(MACAPPNAME) -ov && cd - + +pkg: $(MACAPPNAME) + rm -rf ./packaging + mkdir -p ./packaging + cp ${srcdir}/COPYING ./packaging + cp ${srcdir}/pixmaps/linphone.png ./packaging + pkgbuild --install-location /Applications --scripts ${srcdir}/build/macos/pkg-scripts --component $(MACAPPNAME) ./packaging/linphone.pkg + productbuild --resources . --distribution ${srcdir}/build/macos/pkg-distribution.xml --package-path ./packaging $(MACAPPPKG) +signed-pkg: pkg + mv $(MACAPPPKG) $(MACAPPPKG).tmp + productsign --sign "$(BUNDLE_SIGNING_ID)" $(MACAPPPKG).tmp $(MACAPPPKG) + rm -f $(MACAPPPKG).tmp + ### ### CLEAN @@ -247,4 +262,8 @@ clean-local: discovery: touch specs.c $(CC) --include $(top_builddir)/config.h \ - $(TUNNEL_CFLAGS) $(CFLAGS) $(MEDIASTREAMER2_CFLAGS) $(ORTP_CFLAGS) $(SIPSTACK_CFLAGS) $(CUNIT_CFLAGS) -E -P -v -dD specs.c + $(TUNNEL_CFLAGS) $(CFLAGS) $(MEDIASTREAMER2_CFLAGS) $(ORTP_CFLAGS) $(SIPSTACK_CFLAGS) $(CUNIT_CFLAGS) -E -P -v -dD specs.c + +.PHONY: $(MACAPPNAME) pkg + + diff --git a/NEWS b/NEWS index 650178962..624ad27cb 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,15 @@ +linphone-3.8.2 -- May 7th, 2015 + Application level improvements: + * add support of the StatusNotifierItem standard to display a status icon on KDE5 + * auto-answering can be set through the preferences panel + * bug fixes + + Liblinphone level improvements: + * fix audio bug with opus codec + * fix ICE corner case not properly handled and resulting bad final ice status + * update SO version to 7 (it should have been done in 3.8.0) + * bug fixes + linphone-3.8.1 -- March 31th, 2015 Application level improvements: * Auto-answer ability diff --git a/README b/README index 0de3185c3..94ad9602a 100644 --- a/README +++ b/README @@ -59,14 +59,14 @@ For windows compilation see README.mingw. For macOS X, see README.macos -******************************** notes for developers: ***************************** +******************************** Notes for developers ***************************** Here is a short description of the content of the source tree. - oRTP/ is a poweful implementation of the RTP protocol. See the oRTP/README for more details. - It is used by the mediastreamer to send and receive streams to the network. + It is used by mediastreamer2 to send and receive streams to the network. -- mediastreamer2/ is one of the important part of linphone. It is a framework library for audio +- mediastreamer2/ is one of the important part of linphone. It is a framework for audio and video processing. It contains several objects for grabing audio and video and outputing it (through rtp, to file). It contains also codec objects to compress audio and video streams. diff --git a/README.macos.md b/README.macos.md index 436f6b967..89e3b3525 100644 --- a/README.macos.md +++ b/README.macos.md @@ -44,14 +44,14 @@ Install `GTK`. It is recommended to use the `quartz` backend for better integrat antlr3.2 gettext speex ffmpeg readline libvpx opus ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize brew link --force gettext + #readline is required from linphonec.c otherwise compilation will fail + brew link readline --force ##### Linphone UI (GTK version) - brew install cairo --without-x11 + brew install cairo --without-x11 brew install gtk+ --without-x11 - brew install gettext gtk-mac-integration libsoup hicolor-icon-theme - #readline is required from linphonec.c otherwise compilation will fail - brew link readline --force + brew install gtk-mac-integration libsoup hicolor-icon-theme ### Building Linphone @@ -72,7 +72,7 @@ The next pieces need to be compiled manually. * Install polarssl (encryption library used by belle-sip) - git clone git://git.linphone.org/polarssl.git -b linphone + git clone git://git.linphone.org/polarssl.git cd polarssl ./autogen.sh && ./configure --prefix=/opt/local && make sudo make install @@ -92,7 +92,7 @@ The next pieces need to be compiled manually. * (Optional) Install zrtp, for unbreakable call encryption - git clone git://git.linphone.org:bzrtp + git clone git://git.linphone.org/bzrtp.git cd bzrtp && ./autogen.sh && ./configure --prefix=/opt/local && make sudo make install @@ -103,9 +103,6 @@ The next pieces need to be compiled manually. make CCFLAGS="$CFLAGS -c -O2 -DNeedFunctionPrototypes=1" sudo make install INSTALL_ROOT=/opt/local GSM_INSTALL_INC=/opt/local/include -* (Optional) libvpx-1.2 has a bug on MacOS resulting in ugly video. It is recommended to upgrade it manually to 1.3 from source. -The libvpx build isn't able to produce dual architecture files. To workaround this, configure libvpx twice and use lipo to create a dual architecture `libvpx.a`. - * (Optional, proprietary extension only) Compile and install the tunnel library If you got the source code from git, run `./autogen.sh` first. Then or otherwise, do: @@ -116,7 +113,7 @@ The libvpx build isn't able to produce dual architecture files. To workaround th If you got the source code from git, run `./autogen.sh` first. Then or otherwise, : - PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make + PKG_CONFIG_PATH=/opt/local/lib/pkgconfig ./configure --prefix=/opt/local --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make * Install on the system diff --git a/build/android/liblinphone_tester.mk b/build/android/liblinphone_tester.mk index 37cc4c579..e633116fc 100644 --- a/build/android/liblinphone_tester.mk +++ b/build/android/liblinphone_tester.mk @@ -1,7 +1,7 @@ LOCAL_PATH := $(call my-dir)/../../tester common_SRC_FILES := \ - ../../belle-sip/tester/common/bc_tester_utils.c \ + common/bc_tester_utils.c \ call_tester.c \ liblinphone_tester.c \ message_tester.c \ @@ -30,7 +30,7 @@ common_C_INCLUDES += \ $(LOCAL_PATH)/../coreapi \ $(LOCAL_PATH)/../oRTP/include \ $(LOCAL_PATH)/../mediastreamer2/include \ - $(LOCAL_PATH)/../../belle-sip/tester/common \ + $(LOCAL_PATH)/common include $(CLEAR_VARS) diff --git a/build/macos/Info-linphone.plist.in b/build/macos/Info-linphone.plist.in index 7d20d4ac6..cd148bb84 100644 --- a/build/macos/Info-linphone.plist.in +++ b/build/macos/Info-linphone.plist.in @@ -25,7 +25,7 @@ NSHumanReadableCopyright Copyright 2011 Belledonne Communications LSMinimumSystemVersion - 10.4 + 10.7 NSAppSleepDisabled YES diff --git a/build/macos/Makefile.am b/build/macos/Makefile.am index e90eb2ffe..bff44fefc 100644 --- a/build/macos/Makefile.am +++ b/build/macos/Makefile.am @@ -1,3 +1,7 @@ -EXTRA_DIST=linphone.bundle environment.sh Info-linphone.plist.in - +EXTRA_DIST= \ + linphone.bundle \ + environment.sh \ + Info-linphone.plist.in \ + pkg-scripts/postinstall \ + pkg-distribution.xml.in diff --git a/build/macos/pkg-distribution.xml.in b/build/macos/pkg-distribution.xml.in new file mode 100644 index 000000000..8f66a99d9 --- /dev/null +++ b/build/macos/pkg-distribution.xml.in @@ -0,0 +1,18 @@ + + + Linphone + + + + + + + + + + + + + + linphone.pkg + diff --git a/build/macos/pkg-scripts/postinstall b/build/macos/pkg-scripts/postinstall new file mode 100755 index 000000000..b7ca52a50 --- /dev/null +++ b/build/macos/pkg-scripts/postinstall @@ -0,0 +1,16 @@ +#!/bin/bash + +CURL=/usr/bin/curl +BUNZIP2=/usr/bin/bunzip2 +VERSION=1.4.0 +BASENAME=libopenh264-${VERSION}-osx64 +FILENAME=${BASENAME}.dylib.bz2 +TMPDIR=/tmp/linphone_installer + +mkdir ${TMPDIR} +cd ${TMPDIR} +${CURL} http://ciscobinary.openh264.org/${FILENAME} > ${FILENAME} +${BUNZIP2} ${FILENAME} +cp ${BASENAME}.dylib /Applications/Linphone.app/Contents/Resources/lib/libopenh264.0.dylib +rm -r ${TMPDIR} + diff --git a/cmake/FindZlib.cmake b/cmake/FindZlib.cmake index 6252049bc..86ebf913f 100644 --- a/cmake/FindZlib.cmake +++ b/cmake/FindZlib.cmake @@ -40,11 +40,19 @@ if(ZLIB_INCLUDE_DIRS) set(HAVE_ZLIB_H 1) endif() -find_library(ZLIB_LIBRARIES - NAMES z zlib zlibd - HINTS ${_ZLIB_ROOT_PATHS} - PATH_SUFFIXES bin lib -) +if(ENABLE_STATIC) + find_library(ZLIB_LIBRARIES + NAMES zstatic zlibstatic zlibstaticd + HINTS ${_ZLIB_ROOT_PATHS} + PATH_SUFFIXES bin lib + ) +else() + find_library(ZLIB_LIBRARIES + NAMES z zlib zlibd + HINTS ${_ZLIB_ROOT_PATHS} + PATH_SUFFIXES bin lib + ) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Zlib diff --git a/configure.ac b/configure.ac index bc543c936..1d7fa01ef 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ dnl Process this file with autoconf to produce a configure script. -AC_INIT([linphone],[3.8.1-linphone-daemon],[linphone-developers@nongnu.org]) +AC_INIT([linphone],[3.8.2-linphone-daemon],[linphone-developers@nongnu.org]) AC_CANONICAL_SYSTEM AC_CONFIG_SRCDIR([coreapi/linphonecore.c]) @@ -17,7 +17,7 @@ if test "$LINPHONE_EXTRA_VERSION" != "" ;then LINPHONE_VERSION=$LINPHONE_VERSION.${LINPHONE_EXTRA_VERSION} fi -LIBLINPHONE_SO_CURRENT=6 dnl increment this number when you add/change/remove an interface +LIBLINPHONE_SO_CURRENT=7 dnl increment this number when you add/change/remove an interface LIBLINPHONE_SO_REVISION=0 dnl increment this number when you change source code, without changing interfaces; set to 0 when incrementing CURRENT LIBLINPHONE_SO_AGE=0 dnl increment this number when you add an interface, set to 0 if you remove an interface @@ -347,10 +347,14 @@ if test "$gtk_ui" = "true" ; then fi AC_DEFINE([HAVE_GTK_OSX],[1],[Defined when gtk osx is used]) fi + + PKG_CHECK_MODULES(LIBGLIB, [glib-2.0 >= 2.26.0], [build_status_notifier=yes], [build_status_notifier=no]) else echo "GTK interface compilation is disabled." fi +AM_CONDITIONAL([BUILD_STATUS_NOTIFIER], [test "$build_status_notifier" = "yes"]) + AC_ARG_ENABLE(notify, [AS_HELP_STRING([--enable-notify=[yes/no]], [Enable libnotify support (default=yes)])], [case "${enableval}" in @@ -1037,6 +1041,7 @@ AC_CONFIG_FILES([ build/Makefile build/macos/Makefile build/macos/Info-linphone.plist + build/macos/pkg-distribution.xml m4/Makefile po/Makefile.in pixmaps/Makefile diff --git a/console/CMakeLists.txt b/console/CMakeLists.txt new file mode 100644 index 000000000..328fdbcf2 --- /dev/null +++ b/console/CMakeLists.txt @@ -0,0 +1,53 @@ +############################################################################ +# CMakeLists.txt +# Copyright (C) 2014 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. +# +############################################################################ + +set(LINPHONEC_SOURCE_FILES + linphonec.c + linphonec.h + commands.c +) +set(LINPHONECSH_SOURCE_FILES + shell.c +) + +add_executable(linphonec ${LINPHONEC_SOURCE_FILES}) +target_link_libraries(linphonec linphone) + +if(WIN32) + add_executable(linphoned WIN32 ${LINPHONEC_SOURCE_FILES}) + target_link_libraries(linphoned linphone) +endif() + +add_executable(linphonecsh ${LINPHONECSH_SOURCE_FILES}) +target_link_libraries(linphonecsh linphone) + +set(INSTALL_TARGETS linphonec linphonecsh) +if(WIN32) + list(APPEND INSTALL_TARGETS linphoned) +endif() + +install(TARGETS ${INSTALL_TARGETS} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) diff --git a/console/commands.c b/console/commands.c index cd968f555..d24bfa16b 100644 --- a/console/commands.c +++ b/console/commands.c @@ -28,7 +28,6 @@ #include #ifndef _WIN32_WCE #include -#include #endif /*_WIN32_WCE*/ #include #include @@ -38,6 +37,7 @@ #ifndef WIN32 #include +#include #endif #define AUDIO 0 @@ -1915,24 +1915,24 @@ static int lpc_cmd_register(LinphoneCore *lc, char *args){ const MSList *elem; if (!args) - { - /* it means that you want to register the default proxy */ - LinphoneProxyConfig *cfg=NULL; - linphone_core_get_default_proxy(lc,&cfg); - if (cfg) - { - if(!linphone_proxy_config_is_registered(cfg)) { + { + /* it means that you want to register the default proxy */ + LinphoneProxyConfig *cfg=NULL; + linphone_core_get_default_proxy(lc,&cfg); + if (cfg) + { + if(!linphone_proxy_config_is_registered(cfg)) { linphone_proxy_config_enable_register(cfg,TRUE); linphone_proxy_config_done(cfg); }else{ linphonec_out("default proxy already registered\n"); } - }else{ - linphonec_out("we do not have a default proxy\n"); - return 0; - } - return 1; - } + }else{ + linphonec_out("we do not have a default proxy\n"); + return 0; + } + return 1; + } passwd[0]=proxy[0]=identity[0]='\0'; sscanf(args,"%511s %511s %511s",identity,proxy,passwd); if (proxy[0]=='\0' || identity[0]=='\0'){ @@ -1943,7 +1943,7 @@ static int lpc_cmd_register(LinphoneCore *lc, char *args){ LinphoneAddress *from; LinphoneAuthInfo *info; if ((from=linphone_address_new(identity))!=NULL){ - info=linphone_auth_info_new(NULL,NULL,passwd,NULL,NULL,linphone_address_get_username(from)); + info=linphone_auth_info_new(linphone_address_get_username(from),NULL,passwd,NULL,NULL,linphone_address_get_username(from)); linphone_core_add_auth_info(lc,info); linphone_address_destroy(from); linphone_auth_info_destroy(info); diff --git a/console/linphonec.c b/console/linphonec.c index 9fa4f4a9a..fb3c9d1ba 100644 --- a/console/linphonec.c +++ b/console/linphonec.c @@ -25,9 +25,7 @@ ****************************************************************************/ #include #ifndef _WIN32_WCE -#include #include -#include #include #include #include "private.h" /*coreapi/private.h, needed for LINPHONE_VERSION */ @@ -48,17 +46,19 @@ #endif /*_WIN32_WCE*/ #else #include +#include #include #include #include +#include #endif -#if defined(_WIN32_WCE) - #if !defined(PATH_MAX) #define PATH_MAX 256 #endif /*PATH_MAX*/ +#if defined(_WIN32_WCE) + #if !defined(strdup) #define strdup _strdup #endif /*strdup*/ @@ -661,6 +661,12 @@ main (int argc, char *argv[]) { exit(EXIT_SUCCESS); /* should never reach here */ } +#ifdef _MSC_VER +int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { + return main(__argc, __argv); +} +#endif + /* * Initialize linphonec */ @@ -1214,15 +1220,21 @@ linphonec_parse_cmdline(int argc, char **argv) else if (strncmp ("-c", argv[arg_num], 2) == 0) { if ( ++arg_num >= argc ) print_usage(EXIT_FAILURE); +#ifdef _MSC_VER + if (strcmp(argv[arg_num], "NUL") != 0) { +#endif #if !defined(_WIN32_WCE) - if (access(argv[arg_num],F_OK)!=0 ) - { - fprintf (stderr, - "Cannot open config file %s.\n", - argv[arg_num]); - exit(EXIT_FAILURE); - } + if (access(argv[arg_num], F_OK) != 0) + { + fprintf(stderr, + "Cannot open config file %s.\n", + argv[arg_num]); + exit(EXIT_FAILURE); + } #endif /*_WIN32_WCE*/ +#ifdef _MSC_VER + } +#endif snprintf(configfile_name, PATH_MAX, "%s", argv[arg_num]); } else if (strncmp ("-b", argv[arg_num], 2) == 0) diff --git a/console/shell.c b/console/shell.c index 7a502ecd4..7fbccb4c3 100644 --- a/console/shell.c +++ b/console/shell.c @@ -48,6 +48,7 @@ #define STATUS_AUTOANSWER (1<<3) #define STATUS_IN_CONNECTED (1<<4) /* incoming call accepted */ #define STATUS_OUT_CONNECTED (1<<5) /*outgoing call accepted */ +#define STATUS_IN_COMING (1<<6) /*incoming call pending */ static int make_status_value(const char *status_string){ @@ -70,6 +71,9 @@ static int make_status_value(const char *status_string){ if (strstr(status_string,"hook=answered")){ ret|=STATUS_IN_CONNECTED; } + if (strstr(status_string,"Incoming call from ")){ + ret|=STATUS_IN_COMING; + } return ret; } @@ -181,7 +185,7 @@ static void spawn_linphonec(int argc, char *argv[]){ int fd; /*we are the new process*/ setsid(); - + fd = open("/dev/null", O_RDWR); if (fd==-1){ fprintf(stderr,"Could not open /dev/null\n"); @@ -191,7 +195,7 @@ static void spawn_linphonec(int argc, char *argv[]){ dup2(fd, 1); dup2(fd, 2); close(fd); - + if (execvp("linphonec",args)==-1){ fprintf(stderr,"Fail to spawn linphonec: %s\n",strerror(errno)); exit(-1); @@ -207,7 +211,7 @@ static void spawn_linphonec(int argc, char *argv[]){ const char *cmd = "linphoned.exe --pipe -c NUL"; char *args_in_line = argv_to_line(argc, argv); char *cmd_with_args; - + ZeroMemory( &si, sizeof(si) ); si.cb = sizeof(si); ZeroMemory( &pinfo, sizeof(pinfo) ); @@ -217,7 +221,7 @@ static void spawn_linphonec(int argc, char *argv[]){ } else { cmd_with_args = ortp_strdup(cmd); } - + ret=CreateProcess(NULL, cmd_with_args, NULL, NULL, @@ -308,7 +312,7 @@ static int status_execute(int argc, char *argv[]){ char cmd[512]; char reply[DEFAULT_REPLY_SIZE]; int err; - + if (argc==1){ snprintf(cmd,sizeof(cmd),"status %s",argv[0]); err=send_command(cmd,reply,sizeof(reply),TRUE); diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt index 73fa16fb9..b8b6b27cb 100644 --- a/coreapi/CMakeLists.txt +++ b/coreapi/CMakeLists.txt @@ -20,7 +20,7 @@ # ############################################################################ -if(MSVC) +if(MSVC AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone") find_library(LIBGCC NAMES gcc) find_library(LIBMINGWEX NAMES mingwex) endif() @@ -121,8 +121,6 @@ add_definitions( ) set(LIBS - ${LIBGCC} - ${LIBMINGWEX} ${BELLESIP_LIBRARIES} ${MEDIASTREAMER2_LIBRARIES} ${XML2_LIBRARIES} @@ -142,6 +140,9 @@ endif() if(ENABLE_ASSISTANT) list(APPEND LIBS ${SOUP_LIBRARIES}) endif() +if(MSVC AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone") + list(APPEND LIBS ${LIBGCC} ${LIBMINGWEX}) +endif() if(WIN32 AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone") list(APPEND LIBS shlwapi) endif() @@ -166,7 +167,12 @@ if(WIN32 AND "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone") set_target_properties(linphone PROPERTIES PREFIX "lib") endif() if(ICONV_FOUND) - target_include_directories(linphone PUBLIC ${ICONV_INCLUDE_DIRS}) + if(APPLE) + # Prevent conflict between the system iconv.h header and the one from macports. + target_compile_options(linphone PRIVATE "-include" "${ICONV_INCLUDE_DIRS}/iconv.h") + else() + target_include_directories(linphone PRIVATE ${ICONV_INCLUDE_DIRS}) + endif() endif() install(TARGETS linphone EXPORT LinphoneTargets @@ -199,4 +205,6 @@ install(FILES ${HEADER_FILES} PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) -add_subdirectory(help) +if(ENABLE_DOC) + add_subdirectory(help) +endif() diff --git a/coreapi/Makefile.am b/coreapi/Makefile.am index e57492387..8582213c5 100644 --- a/coreapi/Makefile.am +++ b/coreapi/Makefile.am @@ -199,7 +199,7 @@ AM_CXXFLAGS=$(COMMON_CFLAGS) $(STRICT_OPTIONS_CXX) make_gitversion_h: if test -n "$(GITLOG)" ; then \ if test "$(GITDESCRIBE)" != "" ; then \ - if test "$(GIT_TAG)" != "$(PACKAGE_VERSION)" ; then \ + if [ "$(GIT_TAG)" != "$(PACKAGE_VERSION)" ]; then \ $(ECHO) "*** PACKAGE_VERSION and git tag differ. Please put them identical."; \ exit 1; \ fi ; \ diff --git a/coreapi/bellesip_sal/sal_sdp.c b/coreapi/bellesip_sal/sal_sdp.c index 2ce189d48..b254c67d8 100644 --- a/coreapi/bellesip_sal/sal_sdp.c +++ b/coreapi/bellesip_sal/sal_sdp.c @@ -128,6 +128,11 @@ static void add_rtcp_fb_attributes(belle_sdp_media_description_t *media_desc, co payload_type_set_flag(pt, PAYLOAD_TYPE_RTCP_FEEDBACK_ENABLED); avpf_params = payload_type_get_avpf_params(pt); + /* Add trr-int if not set generally. */ + if (general_trr_int != TRUE) { + add_rtcp_fb_trr_int_attribute(media_desc, payload_type_get_number(pt), avpf_params.trr_interval); + } + /* Add rtcp-fb attributes according to the AVPF features of the payload types. */ if (avpf_params.features & PAYLOAD_TYPE_AVPF_PLI) { add_rtcp_fb_nack_attribute(media_desc, payload_type_get_number(pt), BELLE_SDP_RTCP_FB_PLI); @@ -538,9 +543,6 @@ static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb switch (belle_sdp_rtcp_fb_attribute_get_type(fb_attribute)) { case BELLE_SDP_RTCP_FB_NACK: switch (belle_sdp_rtcp_fb_attribute_get_param(fb_attribute)) { - case BELLE_SDP_RTCP_FB_NONE: - avpf_params.features |= PAYLOAD_TYPE_AVPF_PLI | PAYLOAD_TYPE_AVPF_SLI | PAYLOAD_TYPE_AVPF_RPSI; - break; case BELLE_SDP_RTCP_FB_PLI: avpf_params.features |= PAYLOAD_TYPE_AVPF_PLI; break; @@ -550,6 +552,7 @@ static void apply_rtcp_fb_attribute_to_payload(belle_sdp_rtcp_fb_attribute_t *fb case BELLE_SDP_RTCP_FB_RPSI: avpf_params.features |= PAYLOAD_TYPE_AVPF_RPSI; break; + case BELLE_SDP_RTCP_FB_NONE: default: break; } @@ -581,6 +584,15 @@ static void sdp_parse_rtcp_fb_parameters(belle_sdp_media_description_t *media_de PayloadType *pt; int8_t pt_num; + /* Clear the AVPF features for all payload types. */ + for (pt_it = stream->payloads; pt_it != NULL; pt_it = pt_it->next) { + PayloadTypeAvpfParams avpf_params; + pt = (PayloadType *)pt_it->data; + avpf_params = payload_type_get_avpf_params(pt); + avpf_params.features = PAYLOAD_TYPE_AVPF_NONE; + payload_type_set_avpf_params(pt, avpf_params); + } + /* Handle rtcp-fb attributes that concern all payload types. */ for (it = belle_sdp_media_description_get_attributes(media_desc); it != NULL; it = it->next) { attribute = BELLE_SDP_ATTRIBUTE(it->data); diff --git a/coreapi/call_params.c b/coreapi/call_params.c index 8acc33b19..828fba70c 100644 --- a/coreapi/call_params.c +++ b/coreapi/call_params.c @@ -235,6 +235,21 @@ void linphone_call_params_unref(LinphoneCallParams *cp) { belle_sip_object_unref(cp); } +void linphone_call_params_enable_audio_multicast(LinphoneCallParams *params, bool_t yesno) { + params->audio_multicast_enabled=yesno; +} + +bool_t linphone_call_params_audio_multicast_enabled(const LinphoneCallParams *params) { + return params->audio_multicast_enabled; +} + +void linphone_call_params_enable_video_multicast(LinphoneCallParams *params, bool_t yesno) { + params->video_multicast_enabled=yesno; +} +bool_t linphone_call_params_video_multicast_enabled(const LinphoneCallParams *params) { + return params->video_multicast_enabled; +} + /******************************************************************************* * Constructor and destructor functions * ******************************************************************************/ diff --git a/coreapi/call_params.h b/coreapi/call_params.h index beecc9791..8f9182af1 100644 --- a/coreapi/call_params.h +++ b/coreapi/call_params.h @@ -322,6 +322,42 @@ LINPHONE_PUBLIC LinphoneCallParams * linphone_call_params_ref(LinphoneCallParams LINPHONE_PUBLIC void linphone_call_params_unref(LinphoneCallParams *cp); +/** + * Use to enable multicast rtp for audio stream. + * * If enabled, outgoing calls put a multicast address from #linphone_core_get_video_multicast_addr into audio cline. In case of outgoing call audio stream is sent to this multicast address. + *
For incoming calls behavior is unchanged. + * @param core #LinphoneCallParams + * @param yesno if yes, subsequent calls will propose multicast ip set by #linphone_core_set_audio_multicast_addr + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC void linphone_call_params_enable_audio_multicast(LinphoneCallParams *param, bool_t yesno); + +/** + * Use to get multicast state of audio stream. + * @param core #LinphoneCallParams + * @return true if subsequent calls will propose multicast ip set by #linphone_core_set_audio_multicast_addr + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC bool_t linphone_call_params_audio_multicast_enabled(const LinphoneCallParams *param); + +/** + * Use to enable multicast rtp for video stream. + * If enabled, outgoing calls put a multicast address from #linphone_core_get_video_multicast_addr into video cline. In case of outgoing call video stream is sent to this multicast address. + *
For incoming calls behavior is unchanged. + * @param core #LinphoneCallParams + * @param yesno if yes, subsequent outgoing calls will propose multicast ip set by #linphone_core_set_video_multicast_addr + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC void linphone_call_params_enable_video_multicast(LinphoneCallParams *param, bool_t yesno); +/** + * Use to get multicast state of video stream. + * @param core #LinphoneCallParams + * @return true if subsequent calls will propose multicast ip set by #linphone_core_set_video_multicast_addr + * @ingroup media_parameters +**/ +LINPHONE_PUBLIC bool_t linphone_call_params_video_multicast_enabled(const LinphoneCallParams *param); + + /******************************************************************************* * DEPRECATED * ******************************************************************************/ diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index a82b11f33..393bbd350 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -119,6 +119,8 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia SalMediaDescription *oldmd=call->resultdesc; bool_t all_muted=FALSE; bool_t send_ringbacktone=FALSE; + int md_changed=0; + if (!((call->state == LinphoneCallIncomingEarlyMedia) && (linphone_core_get_ring_during_incoming_early_media(lc)))) { linphone_core_stop_ringing(lc); @@ -144,10 +146,13 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia call->resultdesc=new_md; if ((call->audiostream && call->audiostream->ms.state==MSStreamStarted) || (call->videostream && call->videostream->ms.state==MSStreamStarted)){ clear_early_media_destinations(call); + /* we already started media: check if we really need to restart it*/ if (oldmd){ - int md_changed = media_parameters_changed(call, oldmd, new_md); - if ((md_changed & SAL_MEDIA_DESCRIPTION_CODEC_CHANGED)){ + md_changed = media_parameters_changed(call, oldmd, new_md); + if ((md_changed & ( SAL_MEDIA_DESCRIPTION_CODEC_CHANGED + |SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED + |SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED))){ ms_message("Media descriptions are different, need to restart the streams."); } else if ( call->playing_ringbacktone) { ms_message("Playing ringback tone, will restart the streams."); @@ -181,6 +186,11 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia } } linphone_call_stop_media_streams (call); + if (md_changed & SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED){ + ms_message("Media ip type has changed, destroying sessions context on call [%p]",call); + ms_media_stream_sessions_uninit(&call->sessions[0]); + ms_media_stream_sessions_uninit(&call->sessions[1]); + } linphone_call_init_media_streams (call); } @@ -245,18 +255,6 @@ static bool_t already_a_call_with_remote_address(const LinphoneCore *lc, const L return FALSE; } -static bool_t already_an_outgoing_call_pending(LinphoneCore *lc){ - MSList *elem; - for(elem=lc->calls;elem!=NULL;elem=elem->next){ - LinphoneCall *call=(LinphoneCall*)elem->data; - if (call->state==LinphoneCallOutgoingInit - || call->state==LinphoneCallOutgoingProgress - || call->state==LinphoneCallOutgoingRinging){ - return TRUE; - } - } - return FALSE; -} static void call_received(SalOp *h){ LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(h)); @@ -264,9 +262,9 @@ static void call_received(SalOp *h){ char *alt_contact; LinphoneAddress *from_addr=NULL; LinphoneAddress *to_addr=NULL; - /*this mode is deprcated because probably useless*/ - bool_t prevent_colliding_calls=lp_config_get_int(lc->config,"sip","prevent_colliding_calls",FALSE); + LinphoneAddress *from_address_to_search_if_me=NULL; /*address used to know if I'm the caller*/ SalMediaDescription *md; + const char * p_asserted_id; /* first check if we can answer successfully to this invite */ if (linphone_presence_model_get_basic_status(lc->presence_model) == LinphonePresenceBasicStatusClosed) { @@ -300,9 +298,9 @@ static void call_received(SalOp *h){ sal_op_release(h); return; } + p_asserted_id = sal_custom_header_find(sal_op_get_recv_custom_header(h),"P-Asserted-Identity"); /*in some situation, better to trust the network rather than the UAC*/ if (lp_config_get_int(lc->config,"sip","call_logs_use_asserted_id_instead_of_from",0)) { - const char * p_asserted_id = sal_custom_header_find(sal_op_get_recv_custom_header(h),"P-Asserted-Identity"); LinphoneAddress *p_asserted_id_addr; if (!p_asserted_id) { ms_warning("No P-Asserted-Identity header found so cannot use it for op [%p] instead of from",h); @@ -321,13 +319,26 @@ static void call_received(SalOp *h){ from_addr=linphone_address_new(sal_op_get_from(h)); to_addr=linphone_address_new(sal_op_get_to(h)); - if ((already_a_call_with_remote_address(lc,from_addr) && prevent_colliding_calls) || already_an_outgoing_call_pending(lc)){ - ms_warning("Receiving a call while one is initiated, refusing this one with busy message."); + if (sal_op_get_privacy(h) == SalPrivacyNone) { + from_address_to_search_if_me=linphone_address_clone(from_addr); + } else if (p_asserted_id) { + from_address_to_search_if_me = linphone_address_new(p_asserted_id); + } else { + ms_warning ("Hidden from identity, don't know if it's me"); + } + + if (from_address_to_search_if_me && already_a_call_with_remote_address(lc,from_address_to_search_if_me)){ + char *addr = linphone_address_as_string(from_addr); + ms_warning("Receiving a call while one with same address [%s] is initiated, refusing this one with busy message.",addr); sal_call_decline(h,SalReasonBusy,NULL); sal_op_release(h); linphone_address_destroy(from_addr); linphone_address_destroy(to_addr); + linphone_address_destroy(from_address_to_search_if_me); + ms_free(addr); return; + } else if (from_address_to_search_if_me) { + linphone_address_destroy(from_address_to_search_if_me); } call=linphone_call_new_incoming(lc,from_addr,to_addr,h); @@ -526,6 +537,7 @@ static void call_accepted(SalOp *op){ if (md && !sal_media_description_empty(md) && !linphone_core_incompatible_security(lc,md)){ linphone_call_update_remote_session_id_and_ver(call); + linphone_core_update_ice_state_in_call_stats(call); if (sal_media_description_has_dir(md,SalStreamSendOnly) || sal_media_description_has_dir(md,SalStreamInactive)){ { @@ -620,12 +632,17 @@ static void call_resumed(LinphoneCore *lc, LinphoneCall *call){ } static void call_paused_by_remote(LinphoneCore *lc, LinphoneCall *call){ + LinphoneCallParams *params; /*when we are paused, increment session id, because sdp is changed (a=recvonly appears)*/ linphone_call_increment_local_media_description(call); /* we are being paused */ linphone_core_notify_display_status(lc,_("We are paused by other party.")); - _linphone_core_accept_call_update(lc,call,NULL,LinphoneCallPausedByRemote,"Call paused by remote"); - + params = linphone_call_params_copy(call->params); + if (lp_config_get_int(lc->config, "sip", "inactive_video_on_pause", 0)) { + linphone_call_params_set_video_direction(params, LinphoneMediaDirectionInactive); + } + _linphone_core_accept_call_update(lc,call,params,LinphoneCallPausedByRemote,"Call paused by remote"); + linphone_call_params_unref(params); } static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t is_update){ @@ -658,7 +675,7 @@ static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t if ( call->state == LinphoneCallStreamsRunning) { /*reINVITE and in-dialogs UPDATE go here*/ linphone_core_notify_display_status(lc,_("Call is updated by remote.")); - call->defer_update=FALSE; + call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); linphone_call_set_state(call, LinphoneCallUpdatedByRemote,"Call updated by remote"); if (call->defer_update==FALSE){ linphone_core_accept_call_update(lc,call,NULL); @@ -671,7 +688,7 @@ static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t /* Case where no SDP is present and we were paused by remote. * We send back an ACK with our SDP and expect the remote to send its own. * No state change here until an answer is received. */ - call->defer_update=FALSE; + call->defer_update = lp_config_get_int(lc->config, "sip", "defer_update_default", FALSE); if (call->defer_update==FALSE){ _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); } diff --git a/coreapi/friend.c b/coreapi/friend.c index 44a2a6f82..e6c429bee 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -128,7 +128,7 @@ void __linphone_friend_do_subscribe(LinphoneFriend *fr){ } LinphoneFriend * linphone_friend_new(){ - LinphoneFriend *obj=ms_new0(LinphoneFriend,1); + LinphoneFriend *obj=belle_sip_object_new(LinphoneFriend); obj->pol=LinphoneSPAccept; obj->presence=NULL; obj->subscribe=TRUE; @@ -150,11 +150,11 @@ LinphoneFriend *linphone_friend_new_with_address(const char *addr){ } void linphone_friend_set_user_data(LinphoneFriend *lf, void *data){ - lf->up=data; + lf->user_data=data; } void* linphone_friend_get_user_data(const LinphoneFriend *lf){ - return lf->up; + return lf->user_data; } bool_t linphone_friend_in_list(const LinphoneFriend *lf){ @@ -266,7 +266,7 @@ void linphone_friend_close_subscriptions(LinphoneFriend *lf){ } } -void linphone_friend_destroy(LinphoneFriend *lf){ +static void _linphone_friend_destroy(LinphoneFriend *lf){ if (lf->insub) { sal_op_release(lf->insub); lf->insub=NULL; @@ -278,7 +278,6 @@ void linphone_friend_destroy(LinphoneFriend *lf){ if (lf->presence != NULL) linphone_presence_model_unref(lf->presence); if (lf->uri!=NULL) linphone_address_destroy(lf->uri); if (lf->info!=NULL) buddy_info_free(lf->info); - ms_free(lf); } const LinphoneAddress *linphone_friend_get_address(const LinphoneFriend *lf){ @@ -481,7 +480,7 @@ void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *lf) if (tmp) ms_free(tmp); return ; } - lc->friends=ms_list_append(lc->friends,lf); + lc->friends=ms_list_append(lc->friends,linphone_friend_ref(lf)); lf->lc=lc; if ( linphone_core_ready(lc)) linphone_friend_apply(lf,lc); else lf->commit=TRUE; @@ -685,3 +684,25 @@ LinphoneCore *linphone_friend_get_core(const LinphoneFriend *fr){ return fr->lc; } +LinphoneFriend *linphone_friend_ref(LinphoneFriend *lf) { + belle_sip_object_ref(lf); + return lf; +} + +void linphone_friend_unref(LinphoneFriend *lf) { + belle_sip_object_unref(lf); +} + +/* DEPRECATED */ +void linphone_friend_destroy(LinphoneFriend *lf) { + linphone_friend_unref(lf); +} + +BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneFriend); + +BELLE_SIP_INSTANCIATE_VPTR(LinphoneFriend, belle_sip_object_t, + (belle_sip_object_destroy_t) _linphone_friend_destroy, + NULL, // clone + NULL, // marshal + FALSE +); \ No newline at end of file diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 1c03ec931..fa21303f6 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -37,10 +37,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "mediastreamer2/mseventqueue.h" #include "mediastreamer2/mssndcard.h" -static const char EC_STATE_STORE[] = ".linphone.ecstate"; +static const char *EC_STATE_STORE = ".linphone.ecstate"; #define EC_STATE_MAX_LEN 1048576 // 1Mo static void linphone_call_stats_uninit(LinphoneCallStats *stats); +static void linphone_call_get_local_ip(LinphoneCall *call, const LinphoneAddress *remote_addr); #ifdef VIDEO_ENABLED MSWebCam *get_nowebcam_device(){ @@ -555,26 +556,30 @@ static void transfer_already_assigned_payload_types(SalMediaDescription *old, Sa } static const char *linphone_call_get_bind_ip_for_stream(LinphoneCall *call, int stream_index){ - const char *bind_ip = lp_config_get_string(call->core->config,"rtp","bind_address",call->af==AF_INET6 ? "::0" : "0.0.0.0"); ; + const char *bind_ip = lp_config_get_string(call->core->config,"rtp","bind_address",call->af==AF_INET6 ? "::0" : "0.0.0.0"); if (stream_index<2 && call->media_ports[stream_index].multicast_ip[0]!='\0'){ if (call->dir==LinphoneCallOutgoing){ /*as multicast sender, we must decide a local interface to use to send multicast, and bind to it*/ - bind_ip=call->localip; + bind_ip=call->media_localip; } } return bind_ip; } static const char *linphone_call_get_public_ip_for_stream(LinphoneCall *call, int stream_index){ - const char *public_ip=call->localip; + const char *public_ip=call->media_localip; if (stream_index<2 && call->media_ports[stream_index].multicast_ip[0]!='\0') public_ip=call->media_ports[stream_index].multicast_ip; return public_ip; } -void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call){ +void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call) { + linphone_call_make_local_media_description_with_params(lc, call, call->params); +} + +void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, LinphoneCall *call, LinphoneCallParams *params) { MSList *l; SalMediaDescription *old_md=call->localdesc; int i; @@ -586,19 +591,19 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * CodecConstraints codec_hints={0}; /*multicast is only set in case of outgoing call*/ - if (call->dir == LinphoneCallOutgoing && linphone_core_audio_multicast_enabled(lc)) { + if (call->dir == LinphoneCallOutgoing && linphone_call_params_audio_multicast_enabled(params)) { md->streams[0].ttl=linphone_core_get_audio_multicast_ttl(lc); md->streams[0].multicast_role = SalMulticastSender; } - if (call->dir == LinphoneCallOutgoing && linphone_core_video_multicast_enabled(lc)) { + if (call->dir == LinphoneCallOutgoing && linphone_call_params_video_multicast_enabled(params)) { md->streams[1].ttl=linphone_core_get_video_multicast_ttl(lc); md->streams[1].multicast_role = SalMulticastSender; } - subject=linphone_call_params_get_session_name(call->params); + subject=linphone_call_params_get_session_name(params); - linphone_core_adapt_to_network(lc,call->ping_time,call->params); + linphone_core_adapt_to_network(lc,call->ping_time,params); if (call->dest_proxy) me=linphone_proxy_config_get_identity(call->dest_proxy); @@ -610,13 +615,15 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * md->session_ver=(old_md ? (old_md->session_ver+1) : (rand() & 0xfff)); md->nb_streams=(call->biggestdesc ? call->biggestdesc->nb_streams : 1); - strncpy(md->addr,call->localip,sizeof(md->addr)); + /*re-check local ip address each time we make a new offer, because it may change in case of network reconnection*/ + linphone_call_get_local_ip(call, call->dir == LinphoneCallOutgoing ? call->log->to : call->log->from); + strncpy(md->addr,call->media_localip,sizeof(md->addr)); if (linphone_address_get_username(addr)) /*might be null in case of identity without userinfo*/ strncpy(md->username,linphone_address_get_username(addr),sizeof(md->username)); if (subject) strncpy(md->name,subject,sizeof(md->name)); - if (call->params->down_bw) - md->bandwidth=call->params->down_bw; + if (params->down_bw) + md->bandwidth=params->down_bw; else md->bandwidth=linphone_core_get_download_bandwidth(lc); /*set audio capabilities */ @@ -625,14 +632,14 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * strncpy(md->streams[0].name,"Audio",sizeof(md->streams[0].name)-1); md->streams[0].rtp_port=call->media_ports[0].rtp_port; md->streams[0].rtcp_port=call->media_ports[0].rtcp_port; - md->streams[0].proto=get_proto_from_call_params(call->params); - md->streams[0].dir=get_audio_dir_from_call_params(call->params); + md->streams[0].proto=get_proto_from_call_params(params); + md->streams[0].dir=get_audio_dir_from_call_params(params); md->streams[0].type=SalAudio; - if (call->params->down_ptime) - md->streams[0].ptime=call->params->down_ptime; + if (params->down_ptime) + md->streams[0].ptime=params->down_ptime; else md->streams[0].ptime=linphone_core_get_download_ptime(lc); - codec_hints.bandwidth_limit=call->params->audio_bw; + codec_hints.bandwidth_limit=params->audio_bw; codec_hints.max_codecs=-1; codec_hints.previously_used=old_md ? old_md->streams[0].already_assigned_payloads : NULL; l=make_codec_list(lc, &codec_hints, SalAudio, lc->codecs_conf.audio_codecs); @@ -648,14 +655,14 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * ms_warning("Cannot get audio local ssrc for call [%p]",call); nb_active_streams++; - if (call->params->has_video && (!call->params->internal_call_update || !call->current_params->video_declined)){ + if (params->has_video && (!params->internal_call_update || !call->current_params->video_declined)){ strncpy(md->streams[1].rtp_addr,linphone_call_get_public_ip_for_stream(call,1),sizeof(md->streams[1].rtp_addr)); strncpy(md->streams[1].rtcp_addr,linphone_call_get_public_ip_for_stream(call,1),sizeof(md->streams[1].rtcp_addr)); strncpy(md->streams[1].name,"Video",sizeof(md->streams[1].name)-1); md->streams[1].rtp_port=call->media_ports[1].rtp_port; md->streams[1].rtcp_port=call->media_ports[1].rtcp_port; md->streams[1].proto=md->streams[0].proto; - md->streams[1].dir=get_video_dir_from_call_params(call->params); + md->streams[1].dir=get_video_dir_from_call_params(params); md->streams[1].type=SalVideo; codec_hints.bandwidth_limit=0; codec_hints.max_codecs=-1; @@ -664,8 +671,8 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * md->streams[1].payloads=l; if (call->videostream && call->videostream->ms.sessions.rtp_session) { char* me = linphone_address_as_string_uri_only(call->me); - md->streams[0].rtp_ssrc=rtp_session_get_send_ssrc(call->videostream->ms.sessions.rtp_session); - strncpy(md->streams[0].rtcp_cname,me,sizeof(md->streams[0].rtcp_cname)); + md->streams[1].rtp_ssrc=rtp_session_get_send_ssrc(call->videostream->ms.sessions.rtp_session); + strncpy(md->streams[1].rtcp_cname,me,sizeof(md->streams[1].rtcp_cname)); ms_free(me); } else @@ -807,17 +814,6 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from, linphone_core_get_video_port_range(call->core, &min_port, &max_port); port_config_set(call,1,min_port,max_port); - if (call->dir==LinphoneCallOutgoing){ - if ( linphone_core_audio_multicast_enabled(call->core)){ - strncpy(call->media_ports[0].multicast_ip, - linphone_core_get_audio_multicast_addr(call->core), sizeof(call->media_ports[0].multicast_ip)); - } - if ( linphone_core_video_multicast_enabled(call->core)){ - strncpy(call->media_ports[1].multicast_ip, - linphone_core_get_video_multicast_addr(call->core), sizeof(call->media_ports[1].multicast_ip)); - } - } - linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO], LINPHONE_CALL_STATS_AUDIO); linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO], LINPHONE_CALL_STATS_VIDEO); #ifdef VIDEO_ENABLED @@ -906,18 +902,25 @@ static void linphone_call_get_local_ip(LinphoneCall *call, const LinphoneAddress } if (linphone_core_get_firewall_policy(call->core)==LinphonePolicyUseNatAddress && (ip=linphone_core_get_nat_address_resolved(call->core))!=NULL){ - strncpy(call->localip,ip,LINPHONE_IPADDR_SIZE); + strncpy(call->media_localip,ip,LINPHONE_IPADDR_SIZE); return; } #ifdef BUILD_UPNP else if (call->core->upnp != NULL && linphone_core_get_firewall_policy(call->core)==LinphonePolicyUseUpnp && linphone_upnp_context_get_state(call->core->upnp) == LinphoneUpnpStateOk) { ip = linphone_upnp_context_get_external_ipaddress(call->core->upnp); - strncpy(call->localip,ip,LINPHONE_IPADDR_SIZE); + strncpy(call->media_localip,ip,LINPHONE_IPADDR_SIZE); return; } #endif //BUILD_UPNP - linphone_core_get_local_ip(call->core, af, dest, call->localip); + /*first nominal use case*/ + linphone_core_get_local_ip(call->core, af, dest, call->media_localip); + + /*next, sometime, override from config*/ + if ((ip=lp_config_get_string(call->core->config,"rtp","bind_address",NULL))) + strncpy(call->media_localip,ip,LINPHONE_IPADDR_SIZE); + + return; } static void linphone_call_destroy(LinphoneCall *obj); @@ -930,7 +933,19 @@ BELLE_SIP_INSTANCIATE_VPTR(LinphoneCall, belle_sip_object_t, NULL, // marshal FALSE ); +void linphone_call_fill_media_multicast_addr(LinphoneCall *call) { + if (linphone_call_params_audio_multicast_enabled(call->params)){ + strncpy(call->media_ports[0].multicast_ip, + linphone_core_get_audio_multicast_addr(call->core), sizeof(call->media_ports[0].multicast_ip)); + } else + call->media_ports[0].multicast_ip[0]='\0'; + if (linphone_call_params_video_multicast_enabled(call->params)){ + strncpy(call->media_ports[1].multicast_ip, + linphone_core_get_video_multicast_addr(call->core), sizeof(call->media_ports[1].multicast_ip)); + } else + call->media_ports[1].multicast_ip[0]='\0'; +} LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddress *from, LinphoneAddress *to, const LinphoneCallParams *params, LinphoneProxyConfig *cfg){ LinphoneCall *call = belle_sip_object_new(LinphoneCall); @@ -941,6 +956,8 @@ LinphoneCall * linphone_call_new_outgoing(struct _LinphoneCore *lc, LinphoneAddr linphone_call_init_common(call,from,to); call->params = linphone_call_params_copy(params); + linphone_call_fill_media_multicast_addr(call); + if (linphone_core_get_firewall_policy(call->core) == LinphonePolicyUseIce) { call->ice_session = ice_session_new(); /*for backward compatibility purposes, shall be enabled by default in futur*/ @@ -977,8 +994,6 @@ static void linphone_call_incoming_select_ip_version(LinphoneCall *call){ * Fix call parameters on incoming call to eg. enable AVPF if the incoming call propose it and it is not enabled locally. */ void linphone_call_set_compatible_incoming_call_parameters(LinphoneCall *call, const SalMediaDescription *md) { - int i; - /* Handle AVPF, SRTP and DTLS. */ call->params->avpf_enabled = sal_media_description_has_avpf(md); if (call->params->avpf_enabled == TRUE) { @@ -990,31 +1005,25 @@ void linphone_call_set_compatible_incoming_call_parameters(LinphoneCall *call, c } if ((sal_media_description_has_dtls(md) == TRUE) && (media_stream_dtls_supported() == TRUE)) { call->params->media_encryption = LinphoneMediaEncryptionDTLS; - } - if ((sal_media_description_has_srtp(md) == TRUE) && (ms_srtp_supported() == TRUE)) { + }else if ((sal_media_description_has_srtp(md) == TRUE) && (ms_srtp_supported() == TRUE)) { call->params->media_encryption = LinphoneMediaEncryptionSRTP; + }else if (call->params->media_encryption != LinphoneMediaEncryptionZRTP){ + call->params->media_encryption = LinphoneMediaEncryptionNone; } - /* set both local audio & video multicast ip address if any*/ - for (i=0;i<2;++i){ - if (md->streams[i].rtp_addr[i]!='\0' && ms_is_multicast(md->streams[i].rtp_addr)) { - strncpy(call->media_ports[i].multicast_ip,md->streams[i].rtp_addr,sizeof(call->media_ports[i].multicast_ip)); - ms_message("Disabling rtcp on call [%p], stream [%i] because of multicast",call,i); - call->media_ports[i].mcast_rtp_port=md->streams[i].rtp_port; - call->media_ports[i].mcast_rtcp_port=0; - } - } } LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *from, LinphoneAddress *to, SalOp *op){ LinphoneCall *call = belle_sip_object_new(LinphoneCall); - const SalMediaDescription *md; + SalMediaDescription *md; LinphoneFirewallPolicy fpol; + int i; call->dir=LinphoneCallIncoming; sal_op_set_user_pointer(op,call); call->op=op; call->core=lc; + linphone_call_incoming_select_ip_version(call); sal_op_cnx_ip_to_0000_if_sendonly_enable(op,lp_config_get_default_int(lc->config,"sip","cnx_ip_to_0000_if_sendonly_enabled",0)); @@ -1060,7 +1069,15 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro // It is licit to receive an INVITE without SDP // In this case WE chose the media parameters according to policy. linphone_call_set_compatible_incoming_call_parameters(call, md); + /* set multicast role & address if any*/ + for (i=0;inb_streams;i++){ + if (!sal_call_is_offerer(op) && ms_is_multicast(md->streams[i].rtp_addr)){ + md->streams[i].multicast_role = SalMulticastReceiver; + strncpy(call->media_ports[i].multicast_ip,md->streams[i].rtp_addr,sizeof(call->media_ports[i].multicast_ip)); + } + } } + fpol=linphone_core_get_firewall_policy(call->core); /*create the ice session now if ICE is required*/ if (fpol==LinphonePolicyUseIce){ @@ -1179,21 +1196,8 @@ static void linphone_call_set_terminated(LinphoneCall *call){ void linphone_call_fix_call_parameters(LinphoneCall *call){ if (sal_call_is_offerer(call->op)) { /*get remote params*/ - const LinphoneCallParams* lcp = linphone_call_get_remote_params(call); - call->current_params->video_declined = call->params->has_video && !lcp->has_video; - } - switch(call->params->media_encryption) { - case LinphoneMediaEncryptionZRTP: - case LinphoneMediaEncryptionDTLS: - case LinphoneMediaEncryptionNone: - /* do nothing */ - break; - case LinphoneMediaEncryptionSRTP: - call->params->media_encryption=call->current_params->media_encryption; - break; - default: - ms_fatal("Unknown media encryption type on call [%p]", call); - break; + const LinphoneCallParams* rcp = linphone_call_get_remote_params(call); + call->current_params->video_declined = call->params->has_video && !rcp->has_video; } } @@ -1410,6 +1414,14 @@ LinphoneCall * linphone_call_ref(LinphoneCall *obj){ void linphone_call_unref(LinphoneCall *obj){ belle_sip_object_unref(obj); } +static unsigned int linphone_call_get_n_active_streams(const LinphoneCall *call) { + SalMediaDescription *md=NULL; + if (call->op) + md = sal_call_get_remote_media_description(call->op); + if (!md) + return 0; + return sal_media_description_nb_active_streams_of_type(md, SalAudio) + sal_media_description_nb_active_streams_of_type(md, SalVideo); +} /** * Returns current parameters associated to the call. @@ -1431,20 +1443,36 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){ } #endif - if (linphone_call_all_streams_encrypted(call)) { - if (linphone_call_get_authentication_token(call)) { + /* REVISITED + * Previous code was buggy. + * Relying on the mediastream's state (added by jehan: only) to know the current encryption is unreliable. + * For (added by jehan: both DTLS and) ZRTP it is though necessary. + * But for all others the current_params->media_encryption state should reflect (added by jehan: both) what is agreed by the offer/answer + * mechanism (added by jehan: and encryption status from media which is much stronger than only result of offer/answer ) + * Typically there can be inactive streams for which the media layer has no idea of whether they are encrypted or not. + */ + + switch (call->params->media_encryption) { + case LinphoneMediaEncryptionZRTP: + if (linphone_call_all_streams_encrypted(call) && linphone_call_get_authentication_token(call)) { call->current_params->media_encryption=LinphoneMediaEncryptionZRTP; } else { - /* TODO : check this or presence of dtls_fingerprint in the call? */ - if (call->params->media_encryption == LinphoneMediaEncryptionDTLS) { - call->current_params->media_encryption=LinphoneMediaEncryptionDTLS; - } else { - call->current_params->media_encryption=LinphoneMediaEncryptionSRTP; - } + call->current_params->media_encryption=LinphoneMediaEncryptionNone; } - } else { + break; + case LinphoneMediaEncryptionDTLS: + case LinphoneMediaEncryptionSRTP: + if (linphone_call_get_n_active_streams(call)==0 || linphone_call_all_streams_encrypted(call)) { + call->current_params->media_encryption = call->params->media_encryption; + } else { + call->current_params->media_encryption=LinphoneMediaEncryptionNone; + } + break; + case LinphoneMediaEncryptionNone: call->current_params->media_encryption=LinphoneMediaEncryptionNone; + break; } + call->current_params->avpf_enabled = linphone_call_all_streams_avpf_enabled(call); if (call->current_params->avpf_enabled == TRUE) { call->current_params->avpf_rr_interval = linphone_call_get_avpf_rr_interval(call); @@ -1452,10 +1480,23 @@ const LinphoneCallParams * linphone_call_get_current_params(LinphoneCall *call){ call->current_params->avpf_rr_interval = 0; } if (md){ + const char *rtp_addr; + SalStreamDescription *sd=sal_media_description_find_best_stream(md,SalAudio); call->current_params->audio_dir=sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive; + if (call->current_params->audio_dir != LinphoneMediaDirectionInactive) { + rtp_addr = sd->rtp_addr[0]!='\0' ? sd->rtp_addr : call->resultdesc->addr; + call->current_params->audio_multicast_enabled = ms_is_multicast(rtp_addr); + } else + call->current_params->audio_multicast_enabled = FALSE; + sd=sal_media_description_find_best_stream(md,SalVideo); call->current_params->video_dir=sd ? media_direction_from_sal_stream_dir(sd->dir) : LinphoneMediaDirectionInactive; + if (call->current_params->video_dir != LinphoneMediaDirectionInactive) { + rtp_addr = sd->rtp_addr[0]!='\0' ? sd->rtp_addr : call->resultdesc->addr; + call->current_params->video_multicast_enabled = ms_is_multicast(rtp_addr); + } else + call->current_params->video_multicast_enabled = FALSE; } return call->current_params; @@ -1844,7 +1885,7 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){ if ((linphone_core_get_firewall_policy(call->core) == LinphonePolicyUseIce) && (call->ice_session != NULL)){ if (incoming_offer){ remote=sal_call_get_remote_media_description(call->op); - has_video=call->params->has_video && linphone_core_media_description_contains_video_stream(remote); + has_video=linphone_core_video_enabled(call->core) && linphone_core_media_description_contains_video_stream(remote); }else has_video=call->params->has_video; _linphone_call_prepare_ice_for_stream(call,0,TRUE); @@ -1874,9 +1915,38 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){ /*eventually join to a multicast group if told to do so*/ static void linphone_call_join_multicast_group(LinphoneCall *call, int stream_index, MediaStream *ms){ - if (call->media_ports[stream_index].multicast_ip[stream_index]!='\0' && call->media_ports[stream_index].mcast_rtp_port!=0){ + if (call->media_ports[stream_index].multicast_ip[stream_index]!='\0'){ media_stream_join_multicast_group(ms, call->media_ports[stream_index].multicast_ip); - } + } else + ms_error("Cannot join multicast group if multicast ip is not set for call [%p]",call); +} + +static SalMulticastRole linphone_call_get_multicast_role(const LinphoneCall *call,SalStreamType type) { + SalMulticastRole multicast_role=SalMulticastInactive; + SalMediaDescription *remotedesc, *localdesc; + SalStreamDescription *stream_desc = NULL; + if (!call->op) goto end; + remotedesc = sal_call_get_remote_media_description(call->op); + localdesc = call->localdesc; + if (!localdesc && !remotedesc && call->dir == LinphoneCallOutgoing) { + /*well using call dir*/ + if ((type == SalAudio && linphone_call_params_audio_multicast_enabled(call->params)) + || (type == SalVideo && linphone_call_params_video_multicast_enabled(call->params))) + multicast_role=SalMulticastSender; + } else if (localdesc && (!remotedesc || sal_call_is_offerer(call->op))) { + stream_desc = sal_media_description_find_best_stream(localdesc, type); + } else if (!sal_call_is_offerer(call->op) && remotedesc) + stream_desc = sal_media_description_find_best_stream(remotedesc, type); + + if (stream_desc) + multicast_role=stream_desc->multicast_role; + else + ms_message("Cannot determine multicast role for stream type [%s] on call [%p]",sal_stream_type_to_string(type),call); + + + end: + return multicast_role; + } void linphone_call_init_audio_stream(LinphoneCall *call){ @@ -1887,14 +1957,23 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ char rtcp_tool[128]={0}; char* cname; + snprintf(rtcp_tool,sizeof(rtcp_tool)-1,"%s-%s",linphone_core_get_user_agent_name(),linphone_core_get_user_agent_version()); if (call->audiostream != NULL) return; if (call->sessions[0].rtp_session==NULL){ + SalMulticastRole multicast_role = linphone_call_get_multicast_role(call,SalAudio); + SalMediaDescription *remotedesc=NULL; + SalStreamDescription *stream_desc = NULL; + if (call->op) remotedesc = sal_call_get_remote_media_description(call->op); + if (remotedesc) + stream_desc = sal_media_description_find_best_stream(remotedesc, SalAudio); + call->audiostream=audiostream=audio_stream_new2(linphone_call_get_bind_ip_for_stream(call,0), - call->media_ports[0].mcast_rtp_port ? call->media_ports[0].mcast_rtp_port : call->media_ports[0].rtp_port, - call->media_ports[0].mcast_rtcp_port ? call->media_ports[0].mcast_rtcp_port : call->media_ports[0].rtcp_port); - linphone_call_join_multicast_group(call, 0, &audiostream->ms); + multicast_role == SalMulticastReceiver ? stream_desc->rtp_port : call->media_ports[0].rtp_port, + multicast_role == SalMulticastReceiver ? 0 /*disabled for now*/ : call->media_ports[0].rtcp_port); + if (multicast_role == SalMulticastReceiver) + linphone_call_join_multicast_group(call, 0, &audiostream->ms); rtp_session_enable_network_simulation(call->audiostream->ms.sessions.rtp_session, &lc->net_conf.netsim_params); cname = linphone_address_as_string_uri_only(call->me); audio_stream_set_rtcp_information(call->audiostream, cname, rtcp_tool); @@ -1954,7 +2033,8 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ audio_stream_set_echo_canceller_params(audiostream,len,delay,framesize); if (audiostream->ec) { char *statestr=ms_malloc0(EC_STATE_MAX_LEN); - if (lp_config_read_relative_file(lc->config, EC_STATE_STORE, statestr, EC_STATE_MAX_LEN) == 0) { + if (lp_config_relative_file_exists(lc->config, EC_STATE_STORE) + && lp_config_read_relative_file(lc->config, EC_STATE_STORE, statestr, EC_STATE_MAX_LEN) == 0) { ms_filter_call_method(audiostream->ec, MS_ECHO_CANCELLER_SET_STATE_STRING, statestr); } ms_free(statestr); @@ -1987,11 +2067,14 @@ void linphone_call_init_audio_stream(LinphoneCall *call){ _linphone_call_prepare_ice_for_stream(call,0,FALSE); } + void linphone_call_init_video_stream(LinphoneCall *call){ #ifdef VIDEO_ENABLED LinphoneCore *lc=call->core; char* cname; char rtcp_tool[128]; + + snprintf(rtcp_tool,sizeof(rtcp_tool)-1,"%s-%s",linphone_core_get_user_agent_name(),linphone_core_get_user_agent_version()); if (call->videostream == NULL){ @@ -2000,10 +2083,18 @@ void linphone_call_init_video_stream(LinphoneCall *call){ const char *display_filter=linphone_core_get_video_display_filter(lc); if (call->sessions[1].rtp_session==NULL){ + SalMulticastRole multicast_role = linphone_call_get_multicast_role(call,SalVideo); + SalMediaDescription *remotedesc=NULL; + SalStreamDescription *stream_desc = NULL; + if (call->op) remotedesc = sal_call_get_remote_media_description(call->op); + if (remotedesc) + stream_desc = sal_media_description_find_best_stream(remotedesc, SalVideo); + call->videostream=video_stream_new2(linphone_call_get_bind_ip_for_stream(call,1), - call->media_ports[1].mcast_rtp_port>0 ? call->media_ports[1].mcast_rtp_port : call->media_ports[1].rtp_port, - call->media_ports[1].mcast_rtcp_port>0 ? call->media_ports[1].mcast_rtcp_port : call->media_ports[1].rtcp_port); - linphone_call_join_multicast_group(call, 1, &call->videostream->ms); + multicast_role == SalMulticastReceiver ? stream_desc->rtp_port : call->media_ports[1].rtp_port, + multicast_role == SalMulticastReceiver ? 0 /*disabled for now*/ : call->media_ports[1].rtcp_port); + if (multicast_role == SalMulticastReceiver) + linphone_call_join_multicast_group(call, 1, &call->videostream->ms); rtp_session_enable_network_simulation(call->videostream->ms.sessions.rtp_session, &lc->net_conf.netsim_params); cname = linphone_address_as_string_uri_only(call->me); video_stream_set_rtcp_information(call->videostream, cname, rtcp_tool); @@ -2790,9 +2881,6 @@ void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_mut video_stream_enable_zrtp(call->videostream,call->audiostream,¶ms); } #endif - }else if (call->params->media_encryption==LinphoneMediaEncryptionSRTP){ - call->current_params->media_encryption=linphone_call_all_streams_encrypted(call) ? - LinphoneMediaEncryptionSRTP : LinphoneMediaEncryptionNone; } set_dtls_fingerprint_on_all_streams(call); @@ -3245,23 +3333,27 @@ float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallSta return (float)report_block_get_interarrival_jitter(rrb) / (float)pt->clock_rate; } +rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *stats, LinphoneCall *call) { + rtp_stats_t rtp_stats; + memset(&rtp_stats, 0, sizeof(rtp_stats)); + + if (stats && call) { + if (stats->type == LINPHONE_CALL_STATS_AUDIO && call->audiostream != NULL) + audio_stream_get_local_rtp_stats(call->audiostream, &rtp_stats); + #ifdef VIDEO_ENABLED + else if (call->videostream != NULL) + video_stream_get_local_rtp_stats(call->videostream, &rtp_stats); + #endif + } + return rtp_stats; +} + /** * Gets the cumulative number of late packets * @return The cumulative number of late packets **/ uint64_t linphone_call_stats_get_late_packets_cumulative_number(const LinphoneCallStats *stats, LinphoneCall *call) { - rtp_stats_t rtp_stats; - - if (!stats || !call) - return 0; - memset(&rtp_stats, 0, sizeof(rtp_stats)); - if (stats->type == LINPHONE_CALL_STATS_AUDIO && call->audiostream != NULL) - audio_stream_get_local_rtp_stats(call->audiostream, &rtp_stats); -#ifdef VIDEO_ENABLED - else if (call->videostream != NULL) - video_stream_get_local_rtp_stats(call->videostream, &rtp_stats); -#endif - return rtp_stats.outoftime; + return linphone_call_stats_get_rtp_stats(stats, call).outoftime; } /** @@ -3739,7 +3831,7 @@ void linphone_call_zoom_video(LinphoneCall* call, float zoom_factor, float* cx, static LinphoneAddress *get_fixed_contact(LinphoneCore *lc, LinphoneCall *call , LinphoneProxyConfig *dest_proxy){ LinphoneAddress *ctt=NULL; LinphoneAddress *ret=NULL; - const char *localip=call->localip; + //const char *localip=call->localip; /* first use user's supplied ip address if asked*/ if (linphone_core_get_firewall_policy(lc)==LinphonePolicyUseNatAddress){ @@ -3762,9 +3854,9 @@ static LinphoneAddress *get_fixed_contact(LinphoneCore *lc, LinphoneCall *call , ctt=linphone_core_get_primary_contact_parsed(lc); if (ctt!=NULL){ /*otherwise use supplied localip*/ - linphone_address_set_domain(ctt,localip); - linphone_address_set_port(ctt,linphone_core_get_sip_port(lc)); - ms_message("Contact has been fixed using local ip"/* to %s",ret*/); + linphone_address_set_domain(ctt,NULL/*localip*/); + linphone_address_set_port(ctt,-1/*linphone_core_get_sip_port(lc)*/); + ms_message("Contact has not been fixed stack will do"/* to %s",ret*/); ret=ctt; } } diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index 82eb5f742..c58b3a281 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -1253,6 +1253,7 @@ static void ui_config_read(LinphoneCore *lc) int i; for (i=0;(lf=linphone_friend_new_from_config_file(lc,i))!=NULL;i++){ linphone_core_add_friend(lc,lf); + linphone_friend_unref(lf); } call_logs_read_from_config_file(lc); } @@ -3435,6 +3436,8 @@ int linphone_core_start_update_call(LinphoneCore *lc, LinphoneCall *call){ int err; bool_t no_user_consent=call->params->no_user_consent; + linphone_call_fill_media_multicast_addr(call); + if (!no_user_consent) linphone_call_make_local_media_description(lc,call); #ifdef BUILD_UPNP if(call->upnp_session != NULL) { @@ -3562,10 +3565,11 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho * When receiving a #LinphoneCallUpdatedByRemote state notification, prevent LinphoneCore from performing an automatic answer. * * When receiving a #LinphoneCallUpdatedByRemote state notification (ie an incoming reINVITE), the default behaviour of - * LinphoneCore is to automatically answer the reINIVTE with call parameters unchanged. + * LinphoneCore is defined by the "defer_update_default" option of the "sip" section of the config. If this option is 0 (the default) + * then the LinphoneCore automatically answers the reINIVTE with call parameters unchanged. * However when for example when the remote party updated the call to propose a video stream, it can be useful * to prompt the user before answering. This can be achieved by calling linphone_core_defer_call_update() during - * the call state notifiacation, to deactivate the automatic answer that would just confirm the audio but reject the video. + * the call state notification, to deactivate the automatic answer that would just confirm the audio but reject the video. * Then, when the user responds to dialog prompt, it becomes possible to call linphone_core_accept_call_update() to answer * the reINVITE, with eventually video enabled in the LinphoneCallParams argument. * @@ -3591,6 +3595,7 @@ int linphone_core_start_accept_call_update(LinphoneCore *lc, LinphoneCall *call, linphone_call_make_local_media_description(lc,call); linphone_call_update_remote_session_id_and_ver(call); + linphone_call_stop_ice_for_inactive_streams(call); sal_call_set_local_media_description(call->op,call->localdesc); sal_call_accept(call->op); md=sal_call_get_final_media_description(call->op); @@ -3648,6 +3653,11 @@ int _linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, cons } if (params==NULL){ linphone_call_params_enable_video(call->params, lc->video_policy.automatically_accept || call->current_params->has_video); + if (!sal_call_is_offerer(call->op)) { + /*reset call param for multicast because this param is only relevant when offering*/ + linphone_call_params_enable_audio_multicast(call->params,FALSE); + linphone_call_params_enable_video_multicast(call->params,FALSE); + } }else linphone_call_set_new_params(call,params); @@ -3659,6 +3669,9 @@ int _linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, cons ms_warning("Video isn't supported in conference"); call->params->has_video = FALSE; } + /*update multicast params according to call params*/ + linphone_call_fill_media_multicast_addr(call); + linphone_call_init_media_streams(call); /*so that video stream is initialized if necessary*/ if (call->ice_session != NULL) { if (linphone_call_prepare_ice(call,TRUE)==1) @@ -3718,6 +3731,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, SalOp *replaced; SalMediaDescription *new_md; bool_t was_ringing=FALSE; + MSList * iterator; if (call==NULL){ //if just one call is present answer the only one ... @@ -3738,6 +3752,28 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, break; } + + for (iterator=ms_list_copy(linphone_core_get_calls(lc));iterator!=NULL;iterator=iterator->next) { + LinphoneCall *a_call=(LinphoneCall*)iterator->data; + if (a_call==call) continue; + switch(a_call->state){ + case LinphoneCallOutgoingInit: + case LinphoneCallOutgoingProgress: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + + ms_message("Already existing call [%p] in state [%s], canceling it before accepting new call [%p]" ,a_call + ,linphone_call_state_to_string(a_call->state) + ,call); + linphone_core_terminate_call(lc,a_call); + break; + default: + break; /*nothing to do*/ + } + + } + if (iterator) ms_list_free(iterator); + /* check if this call is supposed to replace an already running one*/ replaced=sal_call_get_replaces(call->op); if (replaced){ @@ -3794,6 +3830,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, } linphone_call_update_remote_session_id_and_ver(call); + linphone_call_stop_ice_for_inactive_streams(call); sal_call_accept(call->op); linphone_core_notify_display_status(lc,_("Connected.")); lc->current_call=call; @@ -3987,27 +4024,34 @@ int linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call){ int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call) { const char *subject=NULL; + LinphoneCallParams *params; if (call->state!=LinphoneCallStreamsRunning && call->state!=LinphoneCallPausedByRemote){ ms_warning("Cannot pause this call, it is not active."); return -1; } - linphone_call_make_local_media_description(lc,call); + if (sal_media_description_has_dir(call->resultdesc, SalStreamSendRecv)) { + subject = "Call on hold"; + } else if (sal_media_description_has_dir(call->resultdesc, SalStreamRecvOnly)) { + subject = "Call on hold for me too"; + } else { + ms_error("No reason to pause this call, it is already paused or inactive."); + return -1; + } + params = linphone_call_params_copy(call->params); + linphone_call_params_set_audio_direction(params, LinphoneMediaDirectionSendOnly); + if (lp_config_get_int(lc->config, "sip", "inactive_video_on_pause", 0)) { + linphone_call_params_set_video_direction(params, LinphoneMediaDirectionInactive); + } else { + linphone_call_params_set_video_direction(params, LinphoneMediaDirectionSendOnly); + } + linphone_call_make_local_media_description_with_params(lc, call, params); + linphone_call_params_unref(params); #ifdef BUILD_UPNP if(call->upnp_session != NULL) { linphone_core_update_local_media_description_from_upnp(call->localdesc, call->upnp_session); } #endif //BUILD_UPNP - if (sal_media_description_has_dir(call->resultdesc,SalStreamSendRecv)){ - sal_media_description_set_dir(call->localdesc,SalStreamSendOnly); - subject="Call on hold"; - }else if (sal_media_description_has_dir(call->resultdesc,SalStreamRecvOnly)){ - sal_media_description_set_dir(call->localdesc,SalStreamSendOnly); - subject="Call on hold for me too"; - }else{ - ms_error("No reason to pause this call, it is already paused or inactive."); - return -1; - } sal_call_set_local_media_description(call->op,call->localdesc); if (sal_call_update(call->op,subject,FALSE) != 0){ linphone_core_notify_display_warning(lc,_("Could not pause the call")); @@ -4127,9 +4171,17 @@ static int remote_address_compare(LinphoneCall *call, const LinphoneAddress *rad * @ingroup call_control */ LinphoneCall *linphone_core_get_call_by_remote_address(LinphoneCore *lc, const char *remote_address){ + LinphoneCall *call=NULL; LinphoneAddress *raddr=linphone_address_new(remote_address); + if (raddr) { + call=linphone_core_get_call_by_remote_address2(lc, raddr); + linphone_address_unref(raddr); + } + return call; +} +LinphoneCall *linphone_core_get_call_by_remote_address2(LinphoneCore *lc, LinphoneAddress *raddr){ MSList *elem=ms_list_find_custom(lc->calls,(int (*)(const void*,const void *))remote_address_compare,raddr); - linphone_address_unref(raddr); + if (elem) return (LinphoneCall*) elem->data; return NULL; } @@ -4625,23 +4677,53 @@ const char** linphone_core_get_video_devices(const LinphoneCore *lc){ } void linphone_core_reload_sound_devices(LinphoneCore *lc){ - const char *ringer,*playback,*capture; - ringer=linphone_core_get_ringer_device(lc); - playback=linphone_core_get_playback_device(lc); - capture=linphone_core_get_capture_device(lc); + const char *ringer; + const char *playback; + const char *capture; + char *ringer_copy = NULL; + char *playback_copy = NULL; + char *capture_copy = NULL; + + ringer = linphone_core_get_ringer_device(lc); + if (ringer != NULL) { + ringer_copy = ms_strdup(ringer); + } + playback = linphone_core_get_playback_device(lc); + if (playback != NULL) { + playback_copy = ms_strdup(playback); + } + capture = linphone_core_get_capture_device(lc); + if (capture != NULL) { + capture_copy = ms_strdup(capture); + } ms_snd_card_manager_reload(ms_snd_card_manager_get()); build_sound_devices_table(lc); - linphone_core_set_ringer_device(lc,ringer); - linphone_core_set_playback_device(lc,playback); - linphone_core_set_capture_device(lc,capture); + if (ringer_copy != NULL) { + linphone_core_set_ringer_device(lc, ringer_copy); + ms_free(ringer_copy); + } + if (playback_copy != NULL) { + linphone_core_set_playback_device(lc, playback_copy); + ms_free(playback_copy); + } + if (capture_copy != NULL) { + linphone_core_set_capture_device(lc, capture_copy); + ms_free(capture_copy); + } } void linphone_core_reload_video_devices(LinphoneCore *lc){ - const char *devid; - devid=linphone_core_get_video_device(lc); + char *devid_copy = NULL; + const char *devid = linphone_core_get_video_device(lc); + if (devid != NULL) { + devid_copy = ms_strdup(devid); + } ms_web_cam_manager_reload(ms_web_cam_manager_get()); build_video_devices_table(lc); - linphone_core_set_video_device(lc,devid); + if (devid_copy != NULL) { + linphone_core_set_video_device(lc, devid_copy); + ms_free(devid_copy); + } } char linphone_core_get_sound_source(LinphoneCore *lc) @@ -6295,7 +6377,7 @@ void ui_config_uninit(LinphoneCore* lc) { ms_message("Destroying friends."); if (lc->friends){ - ms_list_for_each(lc->friends,(void (*)(void *))linphone_friend_destroy); + ms_list_for_each(lc->friends,(void (*)(void *))linphone_friend_unref); ms_list_free(lc->friends); lc->friends=NULL; } @@ -6981,6 +7063,8 @@ void linphone_core_init_default_params(LinphoneCore*lc, LinphoneCallParams *para params->audio_dir=LinphoneMediaDirectionSendRecv; params->video_dir=LinphoneMediaDirectionSendRecv; params->real_early_media=lp_config_get_int(lc->config,"misc","real_early_media",FALSE); + params->audio_multicast_enabled=linphone_core_audio_multicast_enabled(lc); + params->video_multicast_enabled=linphone_core_video_multicast_enabled(lc); } void linphone_core_set_device_identifier(LinphoneCore *lc,const char* device_id) { diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 761bdcd63..22788939a 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -183,7 +183,7 @@ typedef enum _LinphoneReason LinphoneReason; * Converts a LinphoneReason enum to a string. * @ingroup misc **/ -const char *linphone_reason_to_string(LinphoneReason err); +LINPHONE_PUBLIC const char *linphone_reason_to_string(LinphoneReason err); /** * Object representing full details about a signaling error or status. @@ -561,6 +561,7 @@ LINPHONE_PUBLIC float linphone_call_stats_get_sender_loss_rate(const LinphoneCal LINPHONE_PUBLIC float linphone_call_stats_get_receiver_loss_rate(const LinphoneCallStats *stats); LINPHONE_PUBLIC float linphone_call_stats_get_sender_interarrival_jitter(const LinphoneCallStats *stats, LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_stats_get_receiver_interarrival_jitter(const LinphoneCallStats *stats, LinphoneCall *call); +LINPHONE_PUBLIC rtp_stats_t linphone_call_stats_get_rtp_stats(const LinphoneCallStats *statss, LinphoneCall *call); LINPHONE_PUBLIC uint64_t linphone_call_stats_get_late_packets_cumulative_number(const LinphoneCallStats *stats, LinphoneCall *call); LINPHONE_PUBLIC float linphone_call_stats_get_download_bandwidth(const LinphoneCallStats *stats); LINPHONE_PUBLIC float linphone_call_stats_get_upload_bandwidth(const LinphoneCallStats *stats); @@ -1076,9 +1077,10 @@ LINPHONE_PUBLIC bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig /** * Normalize a human readable phone number into a basic string. 888-444-222 becomes 888444222 - * or +33888444222 depending on the #LinphoneProxyConfig argument. This function will always - * generate a normalized username; if input is not a phone number, output will be a copy of input. - * @param proxy #LinphoneProxyConfig object containing country code and/or escape symbol. + * or +33888444222 depending on the #LinphoneProxyConfig object. However this argument is OPTIONNAL + * and if not provided, a default one will be used. + * This function will always generate a normalized username; if input is not a phone number, output will be a copy of input. + * @param proxy #LinphoneProxyConfig object containing country code and/or escape symbol. If NULL passed, will use default configuration. * @param username the string to parse * @param result the newly normalized number * @param result_len the size of the normalized number \a result @@ -1623,7 +1625,7 @@ typedef enum _LinphoneGlobalState{ LinphoneGlobalConfiguring }LinphoneGlobalState; -const char *linphone_global_state_to_string(LinphoneGlobalState gs); +LINPHONE_PUBLIC const char *linphone_global_state_to_string(LinphoneGlobalState gs); /** * LinphoneCoreLogCollectionUploadState is used to notify if log collection upload have been succesfully delivered or not. @@ -2235,6 +2237,17 @@ LINPHONE_PUBLIC LinphoneCallParams *linphone_core_create_call_params(LinphoneCor LINPHONE_PUBLIC LinphoneCall *linphone_core_get_call_by_remote_address(LinphoneCore *lc, const char *remote_address); +/** + * Get the call with the remote_address specified + * @param lc + * @param remote_address + * @return the LinphoneCall of the call if found + * + * @ingroup call_control + */ +LINPHONE_PUBLIC LinphoneCall *linphone_core_get_call_by_remote_address2(LinphoneCore *lc, LinphoneAddress *remote_address); + + /** * Send the specified dtmf. * @@ -2770,10 +2783,10 @@ LINPHONE_PUBLIC void linphone_core_enable_mic(LinphoneCore *lc, bool_t enable); **/ LINPHONE_PUBLIC bool_t linphone_core_mic_enabled(LinphoneCore *lc); -bool_t linphone_core_is_rtp_muted(LinphoneCore *lc); +LINPHONE_PUBLIC bool_t linphone_core_is_rtp_muted(LinphoneCore *lc); -bool_t linphone_core_get_rtp_no_xmit_on_audio_mute(const LinphoneCore *lc); -void linphone_core_set_rtp_no_xmit_on_audio_mute(LinphoneCore *lc, bool_t val); +LINPHONE_PUBLIC bool_t linphone_core_get_rtp_no_xmit_on_audio_mute(const LinphoneCore *lc); +LINPHONE_PUBLIC void linphone_core_set_rtp_no_xmit_on_audio_mute(LinphoneCore *lc, bool_t val); /******************************************************************************* @@ -3129,7 +3142,7 @@ LINPHONE_PUBLIC int linphone_core_get_calls_nb(const LinphoneCore *lc); LINPHONE_PUBLIC const MSList *linphone_core_get_calls(LinphoneCore *lc); -LinphoneGlobalState linphone_core_get_global_state(const LinphoneCore *lc); +LINPHONE_PUBLIC LinphoneGlobalState linphone_core_get_global_state(const LinphoneCore *lc); /** * force registration refresh to be initiated upon next iterate * @ingroup proxies diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index b372f393c..b310ac543 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -250,6 +250,32 @@ jobject getChatMessage(JNIEnv *env, LinphoneChatMessage *msg){ return jobj; } +jobject getFriend(JNIEnv *env, LinphoneFriend *lfriend){ + jobject jobj=0; + + if (lfriend != NULL){ + jclass friendClass = (jclass)env->FindClass("org/linphone/core/LinphoneFriendImpl"); + jmethodID friendCtrId = env->GetMethodID(friendClass,"", "(J)V"); + + void *up=linphone_friend_get_user_data(lfriend); + + if (up == NULL){ + jobj=env->NewObject(friendClass,friendCtrId,(jlong)lfriend); + linphone_friend_set_user_data(lfriend,(void*)env->NewWeakGlobalRef(jobj)); + linphone_friend_ref(lfriend); + }else{ + + jobj=env->NewLocalRef((jobject)up); + if (jobj == NULL){ + jobj=env->NewObject(friendClass,friendCtrId,(jlong)lfriend); + linphone_friend_set_user_data(lfriend,(void*)env->NewWeakGlobalRef(jobj)); + } + } + env->DeleteLocalRef(friendClass); + } + return jobj; +} + jobject getEvent(JNIEnv *env, LinphoneEvent *lev){ if (lev==NULL) return NULL; jobject jev=(jobject)linphone_event_get_user_data(lev); @@ -729,7 +755,7 @@ public: env->CallVoidMethod(lcData->listener ,lcData->notifyPresenceReceivedId ,lcData->core - ,env->NewObject(lcData->friendClass,lcData->friendCtrId,(jlong)my_friend)); + ,getFriend(env,my_friend)); if (env->ExceptionCheck()) { ms_error("Listener %p raised an exception",lcData->listener); env->ExceptionClear(); @@ -747,7 +773,7 @@ public: env->CallVoidMethod(lcData->listener ,lcData->newSubscriptionRequestId ,lcData->core - ,env->NewObject(lcData->friendClass,lcData->friendCtrId,(jlong)my_friend) + ,getFriend(env,my_friend) ,url ? env->NewStringUTF(url) : NULL); if (env->ExceptionCheck()) { ms_error("Listener %p raised an exception",lcData->listener); @@ -1023,12 +1049,16 @@ public: } LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; env->CallVoidMethod(lcData->listener, lcData->fileTransferProgressIndicationId, lcData->core, (jmsg = getChatMessage(env, message)), - content ? create_java_linphone_content(env, content) : NULL, + jcontent, progress); + if (jcontent) { + env->DeleteLocalRef(jcontent); + } } static void fileTransferSend(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size) { @@ -1042,13 +1072,21 @@ public: } LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; + jobject jbuffer = buff ? env->NewDirectByteBuffer(buff, asking) : NULL; *size = env->CallIntMethod(lcData->listener, lcData->fileTransferSendId, lcData->core, (jmsg = getChatMessage(env, message)), - content ? create_java_linphone_content(env, content) : NULL, - buff ? env->NewDirectByteBuffer(buff, asking) : NULL, + jcontent, + jbuffer, asking); + if (jcontent) { + env->DeleteLocalRef(jcontent); + } + if (jbuffer) { + env->DeleteLocalRef(jbuffer); + } } static void fileTransferRecv(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size) { @@ -1064,14 +1102,18 @@ public: jbyteArray jbytes = env->NewByteArray(size); env->SetByteArrayRegion(jbytes, 0, size, (jbyte*)buff); + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; env->CallVoidMethod(lcData->listener, lcData->fileTransferRecvId, lcData->core, (jmsg = getChatMessage(env, message)), - content ? create_java_linphone_content(env, content) : NULL, + jcontent, jbytes, size); + if (jcontent) { + env->DeleteLocalRef(jcontent); + } } static void logCollectionUploadProgressIndication(LinphoneCore *lc, size_t offset, size_t total) { JNIEnv *env = 0; @@ -1810,6 +1852,26 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_addFriend(JNIEnv* env ) { linphone_core_add_friend((LinphoneCore*)lc,(LinphoneFriend*)aFriend); } +extern "C" jobjectArray Java_org_linphone_core_LinphoneCoreImpl_getFriendList(JNIEnv* env + ,jobject thiz + ,jlong lc) { + const MSList* friends = linphone_core_get_friend_list((LinphoneCore*)lc); + int friendsSize = ms_list_size(friends); + jclass cls = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneFriendImpl")); + jobjectArray jFriends = env->NewObjectArray(friendsSize,cls,NULL); + + for (int i = 0; i < friendsSize; i++) { + LinphoneFriend* lfriend = (LinphoneFriend*)friends->data; + jobject jfriend = getFriend(env,lfriend); + if(jfriend != NULL){ + env->SetObjectArrayElement(jFriends, i, jfriend); + } + friends = friends->next; + } + + env->DeleteGlobalRef(cls); + return jFriends; +} extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setPresenceInfo(JNIEnv* env ,jobject thiz ,jlong lc @@ -2837,10 +2899,12 @@ extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_newLinphoneFriend(JNI if (jFriendUri) { const char* friendUri = env->GetStringUTFChars(jFriendUri, NULL); - lResult= linphone_friend_new_with_address(friendUri); + lResult = linphone_friend_new_with_address(friendUri); + linphone_friend_set_user_data(lResult,env->NewWeakGlobalRef(thiz)); env->ReleaseStringUTFChars(jFriendUri, friendUri); } else { lResult = linphone_friend_new(); + linphone_friend_set_user_data(lResult,env->NewWeakGlobalRef(thiz)); } return (jlong)lResult; } @@ -2908,6 +2972,14 @@ extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getRefKey(JNIEnv* } +extern "C" void Java_org_linphone_core_LinphoneFriendImpl_finalize(JNIEnv* env + ,jobject thiz + ,jlong ptr) { + LinphoneFriend *lfriend=(LinphoneFriend*)ptr; + linphone_friend_set_user_data(lfriend,NULL); + linphone_friend_unref(lfriend); +} + /* * Class: org_linphone_core_LinphoneFriendImpl * Method: getPresenceModel @@ -2936,14 +3008,19 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeFriend(JNIEnv* en ,jlong lf) { linphone_core_remove_friend((LinphoneCore*)ptr, (LinphoneFriend*)lf); } -extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_getFriendByAddress(JNIEnv* env +extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_getFriendByAddress(JNIEnv* env ,jobject thiz ,jlong ptr ,jstring jaddress) { const char* address = env->GetStringUTFChars(jaddress, NULL); LinphoneFriend *lf = linphone_core_get_friend_by_address((LinphoneCore*)ptr, address); env->ReleaseStringUTFChars(jaddress, address); - return (jlong) lf; + if(lf != NULL) { + jobject jfriend = getFriend(env,lf); + return jfriend; + } else { + return NULL; + } } extern "C" jlongArray _LinphoneChatRoomImpl_getHistory(JNIEnv* env @@ -3255,14 +3332,16 @@ static void message_state_changed(LinphoneChatMessage* msg, LinphoneChatMessageS jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V"); jobject jmessage = getChatMessage(env, msg); - - jclass chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State")); + env->DeleteLocalRef(clazz); + + jclass chatMessageStateClass = (jclass)env->FindClass("org/linphone/core/LinphoneChatMessage$State"); jmethodID chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass, "fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;"); env->CallVoidMethod(listener, method, jmessage, env->CallStaticObjectMethod(chatMessageStateClass, chatMessageStateFromIntId, (jint)state)); if (state == LinphoneChatMessageStateDelivered || state == LinphoneChatMessageStateNotDelivered) { env->DeleteGlobalRef(listener); } + env->DeleteLocalRef(chatMessageStateClass); } static void file_transfer_progress_indication(LinphoneChatMessage *msg, const LinphoneContent* content, size_t offset, size_t total) { @@ -3276,8 +3355,13 @@ static void file_transfer_progress_indication(LinphoneChatMessage *msg, const Li jobject listener = (jobject) msg->cb_ud; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferProgressChanged", "(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;II)V"); + env->DeleteLocalRef(clazz); jobject jmessage = getChatMessage(env, msg); - env->CallVoidMethod(listener, method, jmessage, content ? create_java_linphone_content(env, content) : NULL, offset, total); + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; + env->CallVoidMethod(listener, method, jmessage, jcontent, offset, total); + if (jcontent) { + env->DeleteLocalRef(jcontent); + } } static void file_transfer_recv(LinphoneChatMessage *msg, const LinphoneContent* content, const LinphoneBuffer *buffer) { @@ -3291,8 +3375,18 @@ static void file_transfer_recv(LinphoneChatMessage *msg, const LinphoneContent* jobject listener = (jobject) msg->cb_ud; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferReceived", "(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;Lorg/linphone/core/LinphoneBuffer;)V"); + env->DeleteLocalRef(clazz); + jobject jmessage = getChatMessage(env, msg); - env->CallVoidMethod(listener, method, jmessage, content ? create_java_linphone_content(env, content) : NULL, buffer ? create_java_linphone_buffer(env, buffer) : NULL); + jobject jbuffer = buffer ? create_java_linphone_buffer(env, buffer) : NULL; + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; + env->CallVoidMethod(listener, method, jmessage, jcontent, jbuffer); + if (jbuffer) { + env->DeleteLocalRef(jbuffer); + } + if (jcontent) { + env->DeleteLocalRef(jcontent); + } } static LinphoneBuffer* file_transfer_send(LinphoneChatMessage *msg, const LinphoneContent* content, size_t offset, size_t size) { @@ -3307,11 +3401,18 @@ static LinphoneBuffer* file_transfer_send(LinphoneChatMessage *msg, const Linph jobject listener = (jobject) msg->cb_ud; jclass clazz = (jclass) env->GetObjectClass(listener); jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageFileTransferSent","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;IILorg/linphone/core/LinphoneBuffer;)V"); + env->DeleteLocalRef(clazz); + jobject jmessage = getChatMessage(env, msg); jobject jbuffer = create_java_linphone_buffer(env, NULL); - env->CallVoidMethod(listener, method, jmessage, content ? create_java_linphone_content(env, content) : NULL, offset, size, jbuffer); + jobject jcontent = content ? create_java_linphone_content(env, content) : NULL; + env->CallVoidMethod(listener, method, jmessage, jcontent, offset, size, jbuffer); + if (jcontent) { + env->DeleteLocalRef(jcontent); + } buffer = create_c_linphone_buffer_from_java_linphone_buffer(env, jbuffer); + env->DeleteLocalRef(jbuffer); return buffer; } @@ -3385,6 +3486,7 @@ static void chat_room_impl_callback(LinphoneChatMessage* msg, LinphoneChatMessag if (state == LinphoneChatMessageStateDelivered || state == LinphoneChatMessageStateNotDelivered) { env->DeleteGlobalRef(listener); env->DeleteGlobalRef(jmessage); + env->DeleteGlobalRef(chatMessageStateClass); linphone_chat_message_set_user_data(msg,NULL); } } @@ -3570,6 +3672,19 @@ extern "C" jboolean Java_org_linphone_core_LinphoneCallParamsImpl_getVideoEnable return (jboolean)linphone_call_params_video_enabled((LinphoneCallParams*)lcp); } +extern "C" void Java_org_linphone_core_LinphoneCallParamsImpl_enableVideoMulticast(JNIEnv *env, jobject thiz, jlong lcp, jboolean b){ + linphone_call_params_enable_video_multicast((LinphoneCallParams*)lcp, b); +} +extern "C" jboolean Java_org_linphone_core_LinphoneCallParamsImpl_videoMulticastEnabled(JNIEnv *env, jobject thiz, jlong lcp){ + return (jboolean)linphone_call_params_video_multicast_enabled((LinphoneCallParams*)lcp); +} +extern "C" void Java_org_linphone_core_LinphoneCallParamsImpl_enableAudioMulticast(JNIEnv *env, jobject thiz, jlong lcp, jboolean b){ + linphone_call_params_enable_audio_multicast((LinphoneCallParams*)lcp, b); +} +extern "C" jboolean Java_org_linphone_core_LinphoneCallParamsImpl_audioMulticastEnabled(JNIEnv *env, jobject thiz, jlong lcp){ + return (jboolean)linphone_call_params_audio_multicast_enabled((LinphoneCallParams*)lcp); +} + extern "C" jboolean Java_org_linphone_core_LinphoneCallParamsImpl_localConferenceMode(JNIEnv *env, jobject thiz, jlong lcp){ return (jboolean)linphone_call_params_get_local_conference_mode((LinphoneCallParams*)lcp); } @@ -3802,6 +3917,17 @@ JNIEXPORT jstring JNICALL Java_org_linphone_core_LinphoneProxyConfigImpl_getReal return jvalue; } +JNIEXPORT jboolean JNICALL Java_org_linphone_core_LinphoneProxyConfigImpl_isPhoneNumber(JNIEnv *env, jobject thiz, jlong ptr, jstring jusername) { + if(jusername){ + const char *username=env->GetStringUTFChars(jusername, NULL); + bool_t res = linphone_proxy_config_is_phone_number((LinphoneProxyConfig *)ptr, username); + env->ReleaseStringUTFChars(jusername,username); + return (jboolean) res; + } else { + return JNI_FALSE; + } +} + extern "C" jint Java_org_linphone_core_LinphoneCallImpl_getDuration(JNIEnv* env,jobject thiz,jlong ptr) { return (jint)linphone_call_get_duration((LinphoneCall *) ptr); } @@ -4088,6 +4214,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_tunnelAddServer(JNIEnv * linphone_tunnel_config_set_delay(tunnelConfig, env->CallIntMethod(config, getDelayMethod)); linphone_tunnel_add_server(tunnel, tunnelConfig); env->ReleaseStringUTFChars(hostString, host); + env->DeleteLocalRef(TunnelConfigClass); } else { ms_error("LinphoneCore.tunnelAddServer(): tunnel feature is not enabled"); } @@ -4117,6 +4244,7 @@ extern "C" jobjectArray Java_org_linphone_core_LinphoneCoreImpl_tunnelGetServers env->CallVoidMethod(elt, setRemoteUdpMirrorPortMethod, linphone_tunnel_config_get_remote_udp_mirror_port(conf)); env->CallVoidMethod(elt, setDelayMethod, linphone_tunnel_config_get_delay(conf)); env->SetObjectArrayElement(tunnelConfigArray, i, elt); + env->DeleteLocalRef(TunnelConfigClass); } } return tunnelConfigArray; @@ -4548,7 +4676,7 @@ static jobject create_java_linphone_content(JNIEnv *env, const LinphoneContent * jint jsize = 0; const LinphoneContentPrivate *content = LINPHONE_CONTENT_PRIVATE(icontent); - contentClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneContentImpl")); + contentClass = (jclass)env->FindClass("org/linphone/core/LinphoneContentImpl"); ctor = env->GetMethodID(contentClass,"", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[BLjava/lang/String;I)V"); jtype = env->NewStringUTF(content->type); @@ -4563,7 +4691,17 @@ static jobject create_java_linphone_content(JNIEnv *env, const LinphoneContent * } jobject jobj = env->NewObject(contentClass, ctor, jname, jtype, jsubtype, jdata, jencoding, jsize); - env->DeleteGlobalRef(contentClass); + + env->DeleteLocalRef(contentClass); + env->DeleteLocalRef(jtype); + env->DeleteLocalRef(jsubtype); + if (jencoding) { + env->DeleteLocalRef(jencoding); + } + if (jname) { + env->DeleteLocalRef(jname); + } + return jobj; } @@ -4573,7 +4711,7 @@ static jobject create_java_linphone_buffer(JNIEnv *env, const LinphoneBuffer *bu jbyteArray jdata = NULL; jint jsize = 0; - bufferClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneBufferImpl")); + bufferClass = (jclass)env->FindClass("org/linphone/core/LinphoneBufferImpl"); ctor = env->GetMethodID(bufferClass,"", "([BI)V"); jsize = buffer ? (jint) buffer->size : 0; @@ -4583,32 +4721,32 @@ static jobject create_java_linphone_buffer(JNIEnv *env, const LinphoneBuffer *bu } jobject jobj = env->NewObject(bufferClass, ctor, jdata, jsize); - env->DeleteGlobalRef(bufferClass); + env->DeleteLocalRef(bufferClass); return jobj; } static LinphoneBuffer* create_c_linphone_buffer_from_java_linphone_buffer(JNIEnv *env, jobject jbuffer) { jclass bufferClass; jmethodID getSizeMethod, getDataMethod; - LinphoneBuffer *buffer; + LinphoneBuffer *buffer = NULL; jint jsize; jobject jdata; jbyteArray jcontent; uint8_t *content; - bufferClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneBufferImpl")); + bufferClass = (jclass)env->FindClass("org/linphone/core/LinphoneBufferImpl"); getSizeMethod = env->GetMethodID(bufferClass, "getSize", "()I"); getDataMethod = env->GetMethodID(bufferClass, "getContent", "()[B"); jsize = env->CallIntMethod(jbuffer, getSizeMethod); jdata = env->CallObjectMethod(jbuffer, getDataMethod); jcontent = reinterpret_cast(jdata); - content = (uint8_t*)env->GetByteArrayElements(jcontent, NULL); - - buffer = linphone_buffer_new_from_data(content, (size_t)jsize); - - env->ReleaseByteArrayElements(jcontent, (jbyte*)content, JNI_ABORT); - env->DeleteGlobalRef(bufferClass); + if (jcontent != NULL) { + content = (uint8_t*)env->GetByteArrayElements(jcontent, NULL); + buffer = linphone_buffer_new_from_data(content, (size_t)jsize); + env->ReleaseByteArrayElements(jcontent, (jbyte*)content, JNI_ABORT); + } + env->DeleteLocalRef(bufferClass); return buffer; } diff --git a/coreapi/linphonefriend.h b/coreapi/linphonefriend.h index d0c18825d..1a6535fed 100644 --- a/coreapi/linphonefriend.h +++ b/coreapi/linphonefriend.h @@ -135,8 +135,9 @@ LINPHONE_PUBLIC LinphoneFriend *linphone_friend_new_with_address(const char *add #define linphone_friend_new_with_addr linphone_friend_new_with_address /** - * Destructor - * @param lf #LinphoneFriend object + * Destroy a LinphoneFriend. + * @param lf LinphoneFriend object + * @deprecated Use linphone_friend_unref() instead. */ LINPHONE_PUBLIC void linphone_friend_destroy(LinphoneFriend *lf); @@ -393,6 +394,18 @@ LINPHONE_PUBLIC LinphoneFriend *linphone_core_find_friend(const LinphoneCore *lc */ LINPHONE_PUBLIC LinphoneFriend *linphone_core_get_friend_by_ref_key(const LinphoneCore *lc, const char *key); +/** + * Acquire a reference to the linphone friend. + * @param[in] lf LinphoneFriend object + * @return The same LinphoneFriend object +**/ +LINPHONE_PUBLIC LinphoneFriend * linphone_friend_ref(LinphoneFriend *lf); + +/** + * Release a reference to the linphone friend. + * @param[in] lf LinohoneFriend object +**/ +LINPHONE_PUBLIC void linphone_friend_unref(LinphoneFriend *lf); /** * Returns the LinphoneCore object managing this friend, if any. diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index d7eb6ad5c..d1be24dc7 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -100,7 +100,7 @@ LpItem * lp_comment_new(const char *comment){ pos=strchr(item->value,'\r'); if (pos==NULL) pos=strchr(item->value,'\n'); - + if(pos) { *pos='\0'; /*replace the '\n' */ } @@ -362,7 +362,7 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa ms_message("Using (r/w) config information from %s", config_filename); lpconfig->filename=ortp_strdup(config_filename); lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",config_filename); - + #if !defined(WIN32) { struct stat fileStat; @@ -719,7 +719,24 @@ static char *_lp_config_dirname(char *path) { #endif } +bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *filename) { + if (lpconfig->filename == NULL) { + return FALSE; + } else { + char *dir = _lp_config_dirname(lpconfig->filename); + char *filepath = ms_strdup_printf("%s/%s", dir, filename); + FILE *file = fopen(filepath, "r"); + ms_free(dir); + ms_free(filepath); + if (file) { + fclose(file); + } + return file != NULL; + } +} + void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filename, const char *data) { + if (lpconfig->filename == NULL) return; if(strlen(data) > 0) { char *dir = _lp_config_dirname(lpconfig->filename); char *filepath = ms_strdup_printf("%s/%s", dir, filename); @@ -759,7 +776,7 @@ int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, ms_free(dir); ms_free(filepath); return 0; - + err: ms_free(dir); ms_free(filepath); diff --git a/coreapi/lpconfig.h b/coreapi/lpconfig.h index 65fd613f4..b03bfa57f 100644 --- a/coreapi/lpconfig.h +++ b/coreapi/lpconfig.h @@ -290,6 +290,11 @@ LINPHONE_PUBLIC void lp_config_write_relative_file(const LpConfig *lpconfig, con */ LINPHONE_PUBLIC int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, char *data, size_t max_length); +/** + * @return TRUE if file exists relative to the to the current location +**/ +LINPHONE_PUBLIC bool_t lp_config_relative_file_exists(const LpConfig *lpconfig, const char *filename); + #ifdef __cplusplus } #endif diff --git a/coreapi/misc.c b/coreapi/misc.c index 9d3d76989..83a732365 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -59,6 +59,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define RTP_HDR_SZ 12 #define IP4_HDR_SZ 20 /*20 is the minimum, but there may be some options*/ +static void clear_ice_check_list(LinphoneCall *call, IceCheckList *removed); bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const LinphonePayloadType *pt){ if (ms_list_find(lc->codecs_conf.audio_codecs, (PayloadType*) pt) || ms_list_find(lc->codecs_conf.video_codecs, (PayloadType*)pt)){ @@ -716,8 +717,26 @@ void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call) linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_AUDIO].ice_state), linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state)); } -void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session) -{ +void linphone_call_stop_ice_for_inactive_streams(LinphoneCall *call) { + int i; + IceSession *session = call->ice_session; + SalMediaDescription *desc = call->localdesc; + + if (session == NULL) return; + if (ice_session_state(session) == IS_Completed) return; + + for (i = 0; i < SAL_MEDIA_DESCRIPTION_MAX_STREAMS; i++) { + IceCheckList *cl = ice_session_check_list(session, i); + if (!sal_stream_description_active(&desc->streams[i]) && cl) { + ice_session_remove_check_list(session, cl); + clear_ice_check_list(call, cl); + } + } + + linphone_core_update_ice_state_in_call_stats(call); +} + +void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session) { const char *rtp_addr, *rtcp_addr; IceSessionState session_state = ice_session_state(session); int nb_candidates; diff --git a/coreapi/private.h b/coreapi/private.h index ccb43d24c..8faa8ad35 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -112,7 +112,8 @@ struct _LinphoneCallParams{ LinphoneMediaDirection video_dir; bool_t video_declined; /*use to keep traces of declined video to avoid to re-offer video in case of automatic RE-INVITE*/ bool_t internal_call_update; /*use mark that call update was requested internally (might be by ice)*/ - + bool_t video_multicast_enabled; + bool_t audio_multicast_enabled; }; BELLE_SIP_DECLARE_VPTR(LinphoneCallParams); @@ -205,8 +206,6 @@ typedef struct StunCandidate{ typedef struct _PortConfig{ char multicast_ip[LINPHONE_IPADDR_SIZE]; - int mcast_rtp_port; - int mcast_rtcp_port; int rtp_port; int rtcp_port; }PortConfig; @@ -227,7 +226,7 @@ struct _LinphoneCall{ LinphoneAddress *me; /*Either from or to based on call dir*/ SalOp *op; SalOp *ping_op; - char localip[LINPHONE_IPADDR_SIZE]; /* our best guess for local ipaddress for this call */ + char media_localip[LINPHONE_IPADDR_SIZE]; /* our best guess for local media ipaddress for this call */ LinphoneCallState state; LinphoneCallState prevstate; LinphoneCallState transfer_state; /*idle if no transfer*/ @@ -395,6 +394,7 @@ void linphone_core_adapt_to_network(LinphoneCore *lc, int ping_time_ms, Linphone int linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call); void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call); void linphone_call_stats_fill(LinphoneCallStats *stats, MediaStream *ms, OrtpEvent *ev); +void linphone_call_stop_ice_for_inactive_streams(LinphoneCall *call); void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session); void linphone_call_update_local_media_description_from_ice_or_upnp(LinphoneCall *call); void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md); @@ -414,8 +414,6 @@ void linphone_core_get_local_ip(LinphoneCore *lc, int af, const char *dest, char LinphoneProxyConfig *linphone_proxy_config_new_from_config_file(LinphoneCore *lc, int index); void linphone_proxy_config_write_to_config_file(struct _LpConfig* config,LinphoneProxyConfig *obj, int index); -bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *cfg, const char *username, char *result, size_t result_len); - void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessage *msg); void linphone_core_is_composing_received(LinphoneCore *lc, SalOp *op, const SalIsComposing *is_composing); @@ -552,6 +550,8 @@ BELLE_SIP_DECLARE_VPTR(LinphoneChatRoom); struct _LinphoneFriend{ + belle_sip_object_t base; + void *user_data; LinphoneAddress *uri; SalOp *insub; SalOp *outsub; @@ -560,7 +560,6 @@ struct _LinphoneFriend{ struct _LinphoneCore *lc; BuddyInfo *info; char *refkey; - void *up; bool_t subscribe; bool_t subscribe_active; bool_t inc_subscribe_pending; @@ -568,6 +567,8 @@ struct _LinphoneFriend{ bool_t initial_subscribes_sent; /*used to know if initial subscribe message was sent or not*/ }; +BELLE_SIP_DECLARE_VPTR(LinphoneFriend); + typedef struct sip_config { @@ -776,7 +777,7 @@ struct _LinphoneCore char* user_certificates_path; LinphoneVideoPolicy video_policy; time_t network_last_check; - + bool_t use_files; bool_t apply_nat_settings; bool_t initial_subscribes_sent; @@ -786,7 +787,7 @@ struct _LinphoneCore bool_t auto_net_state_mon; bool_t network_reachable; bool_t network_reachable_to_be_notified; /*set to true when state must be notified in next iterate*/ - + bool_t use_preview_window; bool_t network_last_status; bool_t ringstream_autorelease; @@ -855,7 +856,9 @@ int linphone_core_get_calls_nb(const LinphoneCore *lc); void linphone_core_set_state(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message); void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call); +void linphone_call_make_local_media_description_with_params(LinphoneCore *lc, LinphoneCall *call, LinphoneCallParams *params); void linphone_call_increment_local_media_description(LinphoneCall *call); +void linphone_call_fill_media_multicast_addr(LinphoneCall *call); void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md); bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, const PayloadType *pt, int bandwidth_limit); @@ -1079,7 +1082,8 @@ BELLE_SIP_TYPE_ID(LinphoneChatRoom), BELLE_SIP_TYPE_ID(LinphoneContent), BELLE_SIP_TYPE_ID(LinphoneLDAPContactProvider), BELLE_SIP_TYPE_ID(LinphoneLDAPContactSearch), -BELLE_SIP_TYPE_ID(LinphoneProxyConfig) +BELLE_SIP_TYPE_ID(LinphoneProxyConfig), +BELLE_SIP_TYPE_ID(LinphoneFriend) BELLE_SIP_DECLARE_TYPES_END diff --git a/coreapi/proxy.c b/coreapi/proxy.c index c66bdc4d4..4283712d9 100644 --- a/coreapi/proxy.c +++ b/coreapi/proxy.c @@ -937,11 +937,12 @@ static void replace_icp(const char *src, char *dest, size_t destlen, const char } -bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len){ +bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *inproxy, const char *username, char *result, size_t result_len){ + bool_t ret; + LinphoneProxyConfig *proxy = inproxy ? inproxy : linphone_proxy_config_new(); memset(result, 0, result_len); if (linphone_proxy_config_is_phone_number(proxy, username)){ - char *flatten; - flatten=flatten_number(username); + char *flatten=flatten_number(username); ms_debug("Flattened number is '%s'",flatten); if (proxy->dial_prefix==NULL || proxy->dial_prefix[0]=='\0'){ @@ -987,11 +988,13 @@ bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const } } ms_free(flatten); - return TRUE; + ret = TRUE; } else { strncpy(result,username,result_len-1); - return FALSE; + ret = FALSE; } + if (inproxy==NULL) ms_free(proxy); + return ret; } /** diff --git a/coreapi/sal.c b/coreapi/sal.c index a5a0755d1..2d6ed1dde 100644 --- a/coreapi/sal.c +++ b/coreapi/sal.c @@ -307,6 +307,8 @@ int sal_stream_description_equals(const SalStreamDescription *sd1, const SalStre if (sd1->type != sd2->type) result |= SAL_MEDIA_DESCRIPTION_CODEC_CHANGED; if (strcmp(sd1->rtp_addr, sd2->rtp_addr) != 0) result |= SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED; + if (sd1->rtp_addr[0]!='\0' && sd2->rtp_addr[0]!='\0' && ms_is_multicast(sd1->rtp_addr) != ms_is_multicast(sd2->rtp_addr)) + result |= SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED; if (sd1->rtp_port != sd2->rtp_port) { if ((sd1->rtp_port == 0) || (sd2->rtp_port == 0)) result |= SAL_MEDIA_DESCRIPTION_CODEC_CHANGED; else result |= SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED; @@ -330,6 +332,8 @@ int sal_media_description_equals(const SalMediaDescription *md1, const SalMediaD int i; if (strcmp(md1->addr, md2->addr) != 0) result |= SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED; + if (md1->addr[0]!='\0' && md2->addr[0]!='\0' && ms_is_multicast(md1->addr) != ms_is_multicast(md2->addr)) + result |= SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED; if (md1->nb_streams != md2->nb_streams) result |= SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED; if (md1->bandwidth != md2->bandwidth) result |= SAL_MEDIA_DESCRIPTION_CODEC_CHANGED; for(i = 0; i < md1->nb_streams; ++i){ diff --git a/gtk+-2.24.8.filelist b/gtk+-2.24.8.filelist index 019823eae..f893fafa0 100644 --- a/gtk+-2.24.8.filelist +++ b/gtk+-2.24.8.filelist @@ -45,6 +45,11 @@ etc/gtk-2.0/gtk.immodules etc/gtk-2.0/im-multipress.conf etc/pango etc/pango/pango.modules +share/locale/ar/LC_MESSAGES/atk10.mo +share/locale/ar/LC_MESSAGES/gdk-pixbuf.mo +share/locale/ar/LC_MESSAGES/glib20.mo +share/locale/ar/LC_MESSAGES/gtk20-properties.mo +share/locale/ar/LC_MESSAGES/gtk20.mo share/locale/cs share/locale/cs/LC_MESSAGES share/locale/cs/LC_MESSAGES/atk10.mo @@ -171,6 +176,12 @@ share/locale/sv/LC_MESSAGES/gettext-runtime.mo share/locale/sv/LC_MESSAGES/glib20.mo share/locale/sv/LC_MESSAGES/gtk20-properties.mo share/locale/sv/LC_MESSAGES/gtk20.mo +share/locale/tr/LC_MESSAGES/atk10.mo +share/locale/tr/LC_MESSAGES/gdk-pixbuf.mo +share/locale/tr/LC_MESSAGES/gettext-runtime.mo +share/locale/tr/LC_MESSAGES/glib20.mo +share/locale/tr/LC_MESSAGES/gtk20-properties.mo +share/locale/tr/LC_MESSAGES/gtk20.mo share/locale/zh_CN share/locale/zh_CN/LC_MESSAGES share/locale/zh_CN/LC_MESSAGES/atk10.mo diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt index ea923ea6d..848a872b9 100644 --- a/gtk/CMakeLists.txt +++ b/gtk/CMakeLists.txt @@ -64,6 +64,8 @@ set(SOURCE_FILES main.c propertybox.c singleinstance.c + status_icon.c + status_notifier.c support.c update.c utils.c diff --git a/gtk/Makefile.am b/gtk/Makefile.am index f979376ef..32656c993 100644 --- a/gtk/Makefile.am +++ b/gtk/Makefile.am @@ -55,7 +55,15 @@ linphone_SOURCES= \ config-fetching.c \ audio_assistant.c \ videowindow.c \ + status_icon.c status_icon.h \ linphone.h + +if BUILD_STATUS_NOTIFIER +linphone_SOURCES+= \ + status_notifier.c \ + status_notifier.h +endif + if BUILD_WIZARD linphone_SOURCES+= \ setupwizard.c diff --git a/gtk/calllogs.c b/gtk/calllogs.c index 7960708c7..51fcb260b 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -147,7 +147,7 @@ static GtkWidget *linphone_gtk_create_call_log_menu(GtkWidget *call_log){ name=linphone_address_as_string(la); call_label=g_strdup_printf(_("Call %s"),name); text_label=g_strdup_printf(_("Send text to %s"),name); - g_free(name); + ms_free(name); } } if (call_label){ diff --git a/gtk/chat.c b/gtk/chat.c index b6cdb76ca..5479b7330 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -294,6 +294,8 @@ void linphone_gtk_compose_text(void) { LinphoneChatRoom *cr=g_object_get_data(G_OBJECT(w),"cr"); if (cr) { linphone_chat_room_compose(cr); + linphone_chat_room_mark_as_read(cr); + linphone_gtk_friend_list_update_chat_picture(); } } @@ -422,7 +424,7 @@ GtkWidget* linphone_gtk_init_chatroom(LinphoneChatRoom *cr, const LinphoneAddres display_history_message(chat_view,messages,with); button = linphone_gtk_get_widget(chat_view,"send"); g_signal_connect_swapped(G_OBJECT(button),"clicked",(GCallback)linphone_gtk_send_text,NULL); - + g_signal_connect_swapped(G_OBJECT(entry),"activate",(GCallback)linphone_gtk_send_text,NULL); g_signal_connect_swapped(G_OBJECT(entry),"changed",(GCallback)linphone_gtk_compose_text,NULL); g_signal_connect(G_OBJECT(notebook),"switch_page",(GCallback)linphone_gtk_notebook_tab_select,NULL); diff --git a/gtk/main.c b/gtk/main.c index ad984c081..c73c57ec2 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -55,6 +55,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #endif +#include "status_icon.h" const char *this_program_ident_string="linphone_ident_string=" LINPHONE_VERSION; @@ -220,7 +221,7 @@ static const char *linphone_gtk_get_factory_config_file(){ basename ++; *basename = '\0'; snprintf(_factory_config_file, sizeof(_factory_config_file), - "%s/../share/Linphone/%s", progdir, FACTORY_CONFIG_FILE); + "%s/../share/linphone/%s", progdir, FACTORY_CONFIG_FILE); } else { free(progdir); return NULL; @@ -342,7 +343,7 @@ static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name) linphone_gtk_visibility_set(shown,window_name,w,TRUE); if (icon_path) { GdkPixbuf *pbuf=create_pixbuf(icon_path); - if(pbuf != NULL) { + if(pbuf) { GList *pbuf_list = NULL; GdkPixbuf *pbuf_16=gdk_pixbuf_scale_simple(pbuf, 16, 16, GDK_INTERP_BILINEAR); GdkPixbuf *pbuf_32=gdk_pixbuf_scale_simple(pbuf, 32, 32, GDK_INTERP_BILINEAR); @@ -351,9 +352,7 @@ static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name) pbuf_list = g_list_append(pbuf_list, pbuf_32); gtk_window_set_icon_list(GTK_WINDOW(w), pbuf_list); gtk_window_set_default_icon_list(pbuf_list); - g_object_unref(G_OBJECT(pbuf_16)); - g_object_unref(G_OBJECT(pbuf_32)); - g_object_unref(G_OBJECT(pbuf)); + g_list_foreach(pbuf_list, (GFunc)g_object_unref,NULL); g_list_free(pbuf_list); } } @@ -545,7 +544,10 @@ void linphone_gtk_show_about(void){ gtk_about_dialog_set_version(GTK_ABOUT_DIALOG(about),LIBLINPHONE_GIT_VERSION); gtk_about_dialog_set_program_name(GTK_ABOUT_DIALOG(about),linphone_gtk_get_ui_config("title","Linphone")); gtk_about_dialog_set_website(GTK_ABOUT_DIALOG(about),linphone_gtk_get_ui_config("home","http://www.linphone.org")); - if (logo) gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about),logo); + if (logo) { + gtk_about_dialog_set_logo(GTK_ABOUT_DIALOG(about), logo); + g_object_unref(logo); + } tmp=linphone_gtk_get_ui_config("artists",defcfg); if (tmp!=defcfg){ const char *tmp2[2]; @@ -1312,7 +1314,8 @@ static void linphone_gtk_global_state_changed(LinphoneCore *lc, LinphoneGlobalSt } } -static void on_call_updated_response(GtkWidget *dialog, gint responseid, LinphoneCall *call){ +static void on_call_updated_response(GtkWidget *dialog, gint responseid, gpointer user_data){ + LinphoneCall *call = (LinphoneCall *)g_object_get_data(G_OBJECT(dialog), "call"); if (linphone_call_get_state(call)==LinphoneCallUpdatedByRemote){ LinphoneCore *lc=linphone_call_get_core(call); LinphoneCallParams *params=linphone_call_params_copy(linphone_call_get_current_params(call)); @@ -1320,13 +1323,12 @@ static void on_call_updated_response(GtkWidget *dialog, gint responseid, Linphon linphone_core_accept_call_update(lc,call,params); linphone_call_params_destroy(params); } - linphone_call_unref(call); g_source_remove_by_user_data(dialog); gtk_widget_destroy(dialog); } static void on_call_updated_timeout(GtkWidget *dialog){ - gtk_widget_destroy(dialog); + on_call_updated_response(dialog, GTK_RESPONSE_NO, NULL); } static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ @@ -1338,7 +1340,7 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ gboolean video_used=linphone_call_params_video_enabled(current_params); g_message("Video used=%i, video requested=%i, automatically_accept=%i", video_used,video_requested,pol->automatically_accept); - if (video_used==FALSE && video_requested && !pol->automatically_accept){ + if (!video_used && video_requested && !pol->automatically_accept){ linphone_core_defer_call_update(lc,call); { const LinphoneAddress *addr=linphone_call_get_remote_address(call); @@ -1351,8 +1353,9 @@ static void linphone_gtk_call_updated_by_remote(LinphoneCall *call){ GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, _("%s proposed to start video. Do you accept ?"),dname); - g_signal_connect(G_OBJECT(dialog),"response",(GCallback)on_call_updated_response,linphone_call_ref(call)); - g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); + g_object_set_data_full(G_OBJECT(dialog), "call", linphone_call_ref(call), (GDestroyNotify)linphone_call_unref); + g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(on_call_updated_response), NULL); + g_timeout_add(20000,(GSourceFunc)on_call_updated_timeout,dialog); gtk_widget_show(dialog); } } @@ -1496,15 +1499,6 @@ void linphone_gtk_link_to_website(GtkWidget *item){ linphone_gtk_open_browser(home); } -#ifndef HAVE_GTK_OSX - -static GtkStatusIcon *icon=NULL; - -static void icon_popup_menu(GtkStatusIcon *status_icon, guint button, guint activate_time, gpointer user_data){ - GtkWidget *menu=(GtkWidget*)g_object_get_data(G_OBJECT(status_icon),"menu"); - gtk_menu_popup(GTK_MENU(menu),NULL,NULL,gtk_status_icon_position_menu,status_icon,button,activate_time); -} - static GtkWidget *create_icon_menu(){ GtkWidget *menu=gtk_menu_new(); GtkWidget *menu_item; @@ -1538,11 +1532,14 @@ static GtkWidget *create_icon_menu(){ return menu; } +#ifndef HAVE_GTK_OSX void linphone_gtk_save_main_window_position(GtkWindow* mw, GdkEvent *event, gpointer data){ gtk_window_get_position(GTK_WINDOW(mw), &main_window_x, &main_window_y); } +#endif -static void handle_icon_click() { +static void handle_icon_click(LinphoneStatusIcon *si, void *user_data) { +#ifndef HAVE_GTK_OSX GtkWidget *mw=linphone_gtk_get_main_window(); if (!gtk_window_is_active((GtkWindow*)mw)) { if(!gtk_widget_is_drawable(mw)){ @@ -1554,67 +1551,42 @@ static void handle_icon_click() { linphone_gtk_save_main_window_position((GtkWindow*)mw, NULL, NULL); gtk_widget_hide(mw); } -} - -static void linphone_gtk_init_status_icon(){ - const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); - const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); - GdkPixbuf *pbuf=create_pixbuf(icon_path); - GtkWidget *menu=create_icon_menu(); - const char *title; - title=linphone_gtk_get_ui_config("title",_("Linphone - a video internet phone")); - icon=gtk_status_icon_new_from_pixbuf(pbuf); -#if GTK_CHECK_VERSION(2,20,2) - gtk_status_icon_set_name(icon,title); #endif - g_signal_connect_swapped(G_OBJECT(icon),"activate",(GCallback)handle_icon_click,NULL); - g_signal_connect(G_OBJECT(icon),"popup-menu",(GCallback)icon_popup_menu,NULL); - gtk_status_icon_set_tooltip(icon,title); - gtk_status_icon_set_visible(icon,TRUE); - g_object_set_data(G_OBJECT(icon),"menu",menu); - g_object_weak_ref(G_OBJECT(icon),(GWeakNotify)gtk_widget_destroy,menu); - g_object_set_data(G_OBJECT(icon),"icon",pbuf); - g_object_weak_ref(G_OBJECT(icon),(GWeakNotify)g_object_unref,pbuf); - pbuf=create_pixbuf(call_icon_path); - g_object_set_data(G_OBJECT(icon),"call_icon",pbuf); } -static gboolean do_icon_blink(GtkStatusIcon *gi){ - GdkPixbuf *call_icon=g_object_get_data(G_OBJECT(gi),"call_icon"); - GdkPixbuf *normal_icon=g_object_get_data(G_OBJECT(gi),"icon"); - GdkPixbuf *cur_icon=gtk_status_icon_get_pixbuf(gi); - if (cur_icon==call_icon){ - gtk_status_icon_set_from_pixbuf(gi,normal_icon); - }else{ - gtk_status_icon_set_from_pixbuf(gi,call_icon); +static void linphone_gtk_status_icon_initialised_cb(LinphoneStatusIconParams *params) { + LinphoneStatusIcon *icon = linphone_status_icon_get(); + if(icon) { + linphone_status_icon_start(icon, params); } - return TRUE; + linphone_status_icon_params_unref(params); } -#endif - -void linphone_gtk_status_icon_set_blinking(gboolean val){ -#ifdef HAVE_GTK_OSX - static gint attention_id; - GtkosxApplication *theMacApp=gtkosx_application_get(); - if (val) - attention_id=gtkosx_application_attention_request(theMacApp,CRITICAL_REQUEST); - else gtkosx_application_cancel_attention_request(theMacApp,attention_id); -#else - if (icon!=NULL){ - guint tout; - tout=(unsigned)GPOINTER_TO_INT(g_object_get_data(G_OBJECT(icon),"timeout")); - if (val && tout==0){ - tout=g_timeout_add(500,(GSourceFunc)do_icon_blink,icon); - g_object_set_data(G_OBJECT(icon),"timeout",GINT_TO_POINTER(tout)); - }else if (!val && tout!=0){ - GdkPixbuf *normal_icon=g_object_get_data(G_OBJECT(icon),"icon"); - g_source_remove(tout); - g_object_set_data(G_OBJECT(icon),"timeout",NULL); - gtk_status_icon_set_from_pixbuf(icon,normal_icon); +static void linphone_gtk_init_status_icon(void) { + GtkWidget *menu = create_icon_menu(); + LinphoneStatusIconParams *params = linphone_status_icon_params_new(); + linphone_status_icon_params_set_menu(params, menu); + linphone_status_icon_params_set_title(params, _("Linphone")); + linphone_status_icon_params_set_description(params, _("A video internet phone")); + linphone_status_icon_params_set_on_click_cb(params, handle_icon_click, NULL); + + if(linphone_status_icon_init( + (LinphoneStatusIconReadyCb)linphone_gtk_status_icon_initialised_cb, + params)) { + + LinphoneStatusIcon *icon = linphone_status_icon_get(); + if(icon) { + linphone_status_icon_start(icon, params); } + linphone_status_icon_params_unref(params); + } +} + +void linphone_gtk_status_icon_set_blinking(gboolean val) { + LinphoneStatusIcon *icon = linphone_status_icon_get(); + if(icon) { + linphone_status_icon_enable_blinking(icon, val); } -#endif } void linphone_gtk_options_activate(GtkWidget *item){ @@ -1763,7 +1735,7 @@ static void linphone_gtk_configure_main_window(){ } if (search_icon){ GdkPixbuf *pbuf=create_pixbuf(search_icon); - if(pbuf != NULL) { + if(pbuf) { gtk_image_set_from_pixbuf(GTK_IMAGE(linphone_gtk_get_widget(w,"directory_search_button_icon")),pbuf); g_object_unref(G_OBJECT(pbuf)); } @@ -1788,6 +1760,7 @@ static void linphone_gtk_configure_main_window(){ if (pbuf) { GtkButton *button=GTK_BUTTON(linphone_gtk_get_widget(w,"keypad")); gtk_button_set_image(button,gtk_image_new_from_pixbuf (pbuf)); + g_object_unref(pbuf); } } if (linphone_gtk_can_manage_accounts()) { @@ -2018,13 +1991,10 @@ static void linphone_gtk_quit(void){ quit_done=TRUE; linphone_gtk_quit_core(); linphone_gtk_uninit_instance(); -#ifndef HAVE_GTK_OSX - g_object_unref(icon); - icon=NULL; -#endif #ifdef HAVE_NOTIFY notify_uninit(); #endif + linphone_status_icon_uninit(); gtk_widget_destroy(the_ui); the_ui=NULL; gdk_threads_leave(); @@ -2061,9 +2031,9 @@ static void linphone_gtk_init_ui(void){ start_option=START_AUDIO_ASSISTANT; iconified = TRUE; } -#ifndef HAVE_GTK_OSX + linphone_gtk_init_status_icon(); -#endif + if (!iconified){ linphone_gtk_show_main_window(); linphone_gtk_check_soundcards(); @@ -2097,43 +2067,30 @@ int main(int argc, char *argv[]){ workingdir= (tmp=g_getenv("LINPHONE_WORKDIR")) ? g_strdup(tmp) : NULL; -#ifdef WIN32 - /*workaround for windows: sometimes LANG is defined to an integer value, not understood by gtk */ - if ((lang=getenv("LANG"))!=NULL){ - if (atoi(lang)!=0){ - char tmp[128]; - snprintf(tmp,sizeof(tmp),"LANG=",lang); - _putenv(tmp); - } - } -#else +#ifdef __linux /*for pulseaudio:*/ g_setenv("PULSE_PROP_media.role", "phone", TRUE); #endif + lang=linphone_gtk_get_lang(config_file); if (lang == NULL || lang[0]=='\0'){ - lang = getenv("LANG"); + lang = g_getenv("LANGUAGE"); + if (!lang) lang = g_getenv("LANG"); } if (lang && lang[0]!='\0'){ #ifdef WIN32 - char tmp[128]; - snprintf(tmp,sizeof(tmp),"LANG=%s",lang); - _putenv(tmp); if (strncmp(lang,"zh",2)==0){ workaround_gtk_entry_chinese_bug=TRUE; } -#elif __APPLE__ - setenv("LANG",lang,1); - setenv("LANGUAGE",lang,1); -#else - setenv("LANGUAGE",lang,1); #endif + g_setenv("LANGUAGE",lang,1); } #ifdef ENABLE_NLS + setlocale(LC_ALL, ""); bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - setlocale(LC_ALL,""); + /*do not use textdomain(): this sets a global default domain. On Mac OS bundle, it breaks gtk translations (obscure bug somewhere)*/ /*textdomain (GETTEXT_PACKAGE);*/ #else @@ -2200,7 +2157,10 @@ int main(int argc, char *argv[]){ } g_set_application_name(app_name); pbuf=create_pixbuf(icon_path); - if (pbuf!=NULL) gtk_window_set_default_icon(pbuf); + if (pbuf) { + gtk_window_set_default_icon(pbuf); + g_object_unref(pbuf); + } #ifdef HAVE_GTK_OSX GtkosxApplication *theMacApp = gtkosx_application_get(); @@ -2242,10 +2202,6 @@ core_start: goto core_start; } if (config_file) g_free(config_file); -#ifndef HAVE_GTK_OSX - /*workaround a bug on win32 that makes status icon still present in the systray even after program exit.*/ - if (icon) gtk_status_icon_set_visible(icon,FALSE); -#endif free(progpath); /*output a translated "hello" string to the terminal, which allows the builder to check that translations are working.*/ if (selftest){ diff --git a/gtk/propertybox.c b/gtk/propertybox.c index 102aeafc1..6f4816ece 100644 --- a/gtk/propertybox.c +++ b/gtk/propertybox.c @@ -532,6 +532,23 @@ static void fmtp_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_t } } +static void bitrate_edited(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer userdata){ + GtkListStore *store=(GtkListStore*)userdata; + GtkTreeIter iter; + float newbitrate=0; + + if (!new_text) return; + + if (sscanf(new_text, "%f", &newbitrate)!=1) return; + + if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store),&iter,path)){ + PayloadType *pt; + gtk_list_store_set(store,&iter,CODEC_BITRATE,newbitrate,-1); + gtk_tree_model_get(GTK_TREE_MODEL(store),&iter,CODEC_PRIVDATA,&pt,-1); + linphone_core_set_payload_type_bitrate(linphone_gtk_get_core(), pt, (int)newbitrate); + } +} + static void linphone_gtk_init_codec_list(GtkTreeView *listview){ GtkCellRenderer *renderer; GtkTreeViewColumn *column; @@ -571,7 +588,9 @@ static void linphone_gtk_init_codec_list(GtkTreeView *listview){ renderer, "text", CODEC_BITRATE, "foreground",CODEC_COLOR, + "editable",TRUE, NULL); + g_signal_connect(G_OBJECT(renderer),"edited",G_CALLBACK(bitrate_edited),store); gtk_tree_view_append_column (listview, column); renderer = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes (_("Parameters"), diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c index 8e269e266..335062a01 100644 --- a/gtk/setupwizard.c +++ b/gtk/setupwizard.c @@ -26,8 +26,6 @@ static const int PASSWORD_MIN_SIZE = 6; static const int LOGIN_MIN_SIZE = 4; static GtkWidget *the_assistant=NULL; -static GdkPixbuf *ok; -static GdkPixbuf *notok; static GtkWidget *create_intro(){ GtkWidget *vbox=gtk_vbox_new(FALSE,2); @@ -205,10 +203,12 @@ static void account_email_changed(GtkEntry *entry, GtkWidget *w) { GtkWidget *assistant=gtk_widget_get_toplevel(w); if (g_regex_match_simple("^[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$", gtk_entry_get_text(email), 0, 0)) { + GdkPixbuf *ok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "ok")); g_object_set_data(G_OBJECT(w),"is_email_correct",GINT_TO_POINTER(1)); gtk_image_set_from_pixbuf(isEmailOk, ok); } else { + GdkPixbuf *notok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "notok")); g_object_set_data(G_OBJECT(w),"is_email_correct",GINT_TO_POINTER(0)); gtk_image_set_from_pixbuf(isEmailOk, notok); } @@ -227,11 +227,13 @@ static void account_password_changed(GtkEntry *entry, GtkWidget *w) { if (gtk_entry_get_text_length(password) >= PASSWORD_MIN_SIZE && g_ascii_strcasecmp(gtk_entry_get_text(password), gtk_entry_get_text(password_confirm)) == 0) { + GdkPixbuf *ok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "ok")); g_object_set_data(G_OBJECT(w),"is_password_correct",GINT_TO_POINTER(1)); gtk_image_set_from_pixbuf(isPasswordOk, ok); gtk_label_set_text(passwordError, ""); } else { + GdkPixbuf *notok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "notok")); if (gtk_entry_get_text_length(password) < PASSWORD_MIN_SIZE) { gtk_label_set_text(passwordError, "Password is too short !"); } @@ -252,11 +254,13 @@ gboolean update_interface_with_username_availability(gpointer *w) { int account_existing = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w),"is_username_used")); if (account_existing == 0) { + GdkPixbuf *ok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "ok")); g_object_set_data(G_OBJECT(w),"is_username_available",GINT_TO_POINTER(1)); gtk_image_set_from_pixbuf(isUsernameOk, ok); gtk_label_set_text(usernameError, ""); } else { + GdkPixbuf *notok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "notok")); gtk_label_set_text(usernameError, "Username is already in use !"); g_object_set_data(G_OBJECT(w),"is_username_available",GINT_TO_POINTER(0)); gtk_image_set_from_pixbuf(isUsernameOk, notok); @@ -297,6 +301,7 @@ static void account_username_changed(GtkEntry *entry, GtkWidget *w) { #endif } else { + GdkPixbuf *notok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "notok")); if (gtk_entry_get_text_length(username) < LOGIN_MIN_SIZE) { gtk_label_set_text(usernameError, "Username is too short"); } @@ -313,7 +318,7 @@ static void account_username_changed(GtkEntry *entry, GtkWidget *w) { static GtkWidget *create_account_information_page() { GtkWidget *vbox=gtk_table_new(7, 3, FALSE); - + GdkPixbuf *notok = GDK_PIXBUF(g_object_get_data(G_OBJECT(the_assistant), "notok")); GtkWidget *label=gtk_label_new(_("(*) Required fields")); GtkWidget *labelUsername=gtk_label_new(_("Username: (*)")); GtkWidget *isUsernameOk=gtk_image_new_from_pixbuf(notok); @@ -595,6 +600,8 @@ void linphone_gtk_show_assistant(void){ GtkWidget *validate; GtkWidget *error; GtkWidget *end; + GdkPixbuf *ok; + GdkPixbuf *notok; if(the_assistant!=NULL) return; w=the_assistant=gtk_assistant_new(); @@ -602,7 +609,9 @@ void linphone_gtk_show_assistant(void){ gtk_window_set_title(GTK_WINDOW(w),_("SIP account configuration assistant")); ok = create_pixbuf(linphone_gtk_get_ui_config("ok","ok.png")); + g_object_set_data_full(G_OBJECT(the_assistant), "ok", ok, g_object_unref); notok = create_pixbuf(linphone_gtk_get_ui_config("notok","notok.png")); + g_object_set_data_full(G_OBJECT(the_assistant), "notok", notok, g_object_unref); p1=create_intro(); p2=create_setup_signin_choice(); diff --git a/gtk/status_icon.c b/gtk/status_icon.c new file mode 100644 index 000000000..ba16e28ea --- /dev/null +++ b/gtk/status_icon.c @@ -0,0 +1,516 @@ +/* +linphone, gtk-glade interface. +Copyright (C) 2015 Belledonne Communications + +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. +*/ + +#include "status_icon.h" +#include "linphone.h" + +#ifdef HAVE_GTK_OSX +#include +#endif + +#if !defined(WIN32) && !defined(__APPLE__) && GLIB_CHECK_VERSION(2, 26, 0) +#define STATUS_NOTIFIER_IS_USABLE 1 +#endif + +#include "status_notifier.h" + +typedef struct __LinphoneStatusIconDesc _LinphoneStatusIconDesc; + +static LinphoneStatusIcon *_linphone_status_icon_instance = NULL; +static const _LinphoneStatusIconDesc *_linphone_status_icon_selected_desc = NULL; +static GSList *_linphone_status_icon_impls = NULL; + + +struct _LinphoneStatusIconParams { + char *title; + char *desc; + GtkWidget *menu; + LinphoneStatusIconOnClickCallback on_click_cb; + void *user_data; + int ref; +}; + +LinphoneStatusIconParams *linphone_status_icon_params_new(void) { + return g_new0(LinphoneStatusIconParams, 1); +} + +LinphoneStatusIconParams *linphone_status_icon_params_ref(LinphoneStatusIconParams *obj) { + obj->ref++; + return obj; +} + +void linphone_status_icon_params_unref(LinphoneStatusIconParams *obj) { + obj->ref--; + if(obj->ref < 0) { + if(obj->title) g_free(obj->title); + if(obj->menu) g_object_unref(obj->menu); + if(obj->desc) g_free(obj->desc); + g_free(obj); + } +} + +void linphone_status_icon_params_set_title(LinphoneStatusIconParams *obj, const char *title) { + if(obj->title) g_free(obj->title); + if(title) obj->title = g_strdup(title); + else obj->title = NULL; +} + +void linphone_status_icon_params_set_description(LinphoneStatusIconParams *obj, const char *desc) { + if(obj->desc) g_free(obj->desc); + if(desc) obj->desc = g_strdup(desc); + else obj->desc = NULL; +} + +void linphone_status_icon_params_set_menu(LinphoneStatusIconParams *obj, GtkWidget *menu) { + if(obj->menu) g_object_unref(obj->menu); + if(menu) obj->menu = g_object_ref_sink(menu); + else obj->menu = NULL; +} + +void linphone_status_icon_params_set_on_click_cb(LinphoneStatusIconParams *obj, LinphoneStatusIconOnClickCallback cb, void *user_data) { + obj->on_click_cb = cb; + obj->user_data = user_data; +} + + +typedef void (*LinphoneStatusIconDescInitFunc)(LinphoneStatusIcon *obj); +typedef void (*LinphoneStatusIconDescUninitFunc)(LinphoneStatusIcon *obj); +typedef void (*LinphoneStatusIconDescStartFunc)(LinphoneStatusIcon *obj); +typedef void (*LinphoneStatusIconDescEnableBlinkingFunc)(LinphoneStatusIcon *obj, gboolean enable); +typedef void (*LinphoneStatusIconDescIsSupportedResultCb)(const _LinphoneStatusIconDesc *obj, gboolean result, void *user_data); +typedef gboolean (*LinphoneStatusIconDescIsSupportedFunc)( + const _LinphoneStatusIconDesc *desc, + gboolean *result, + LinphoneStatusIconDescIsSupportedResultCb cb, + void *user_data +); +typedef void (*LinphoneStatusIconDescFindResultCb)(const _LinphoneStatusIconDesc *desc, void *user_data); + +struct __LinphoneStatusIconDesc { + const char *impl_name; + LinphoneStatusIconDescInitFunc init; + LinphoneStatusIconDescUninitFunc uninit; + LinphoneStatusIconDescStartFunc start; + LinphoneStatusIconDescEnableBlinkingFunc enable_blinking; + LinphoneStatusIconDescIsSupportedFunc is_supported; +}; + +static gboolean _linphone_status_icon_desc_is_supported( + const _LinphoneStatusIconDesc *desc, + gboolean *result, + LinphoneStatusIconDescIsSupportedResultCb cb, + void *user_data) { + + return desc->is_supported(desc, result, cb, user_data); +} + +typedef struct { + GSList *i; + LinphoneStatusIconDescFindResultCb cb; + void *user_data; +} _LinphoneStatusIconDescSearchCtx; + +static void _linphone_status_icon_desc_is_supported_result_cb( + const _LinphoneStatusIconDesc *desc, + gboolean result, + _LinphoneStatusIconDescSearchCtx *ctx) { + + if(!result) { + ; + for(; ctx->i; ctx->i = g_slist_next(ctx->i)) { + if(_linphone_status_icon_desc_is_supported( + (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), + &result, + (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, + ctx)) { + + if(result) break; + } else return; + } + } + if(ctx->cb) ctx->cb((const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), ctx->user_data); + g_free(ctx); +} + +static gboolean _linphone_status_icon_find_first_available_impl( + const _LinphoneStatusIconDesc **desc, + LinphoneStatusIconDescFindResultCb cb, + void *user_data) { + + gboolean result; + _LinphoneStatusIconDescSearchCtx *ctx = g_new0(_LinphoneStatusIconDescSearchCtx, 1); + ctx->cb = cb; + ctx->user_data = user_data; + + for(ctx->i=_linphone_status_icon_impls; ctx->i; ctx->i = g_slist_next(ctx->i)) { + if(_linphone_status_icon_desc_is_supported( + (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0), + &result, + (LinphoneStatusIconDescIsSupportedResultCb)_linphone_status_icon_desc_is_supported_result_cb, + ctx)) { + + if(result) { + *desc = (const _LinphoneStatusIconDesc *)g_slist_nth_data(ctx->i, 0); + goto sync_return; + } + } else { + return 0; + } + } + *desc = NULL; + +sync_return: + g_free(ctx); + return 1; +} + + +struct _LinphoneStatusIcon { + const _LinphoneStatusIconDesc *desc; + LinphoneStatusIconParams *params; + void *data; +}; + +static LinphoneStatusIcon *_linphone_status_icon_new(const _LinphoneStatusIconDesc *desc) { + LinphoneStatusIcon *si = (LinphoneStatusIcon *)g_new0(LinphoneStatusIcon, 1); + si->desc = desc; + if(desc->init) desc->init(si); + return si; +} + +static void _linphone_status_icon_free(LinphoneStatusIcon *obj) { + if(obj->desc->uninit) obj->desc->uninit(obj->data); + if(obj->params) linphone_status_icon_params_unref(obj->params); + g_free(obj); +} + +const char *linphone_status_icon_get_implementation_name(const LinphoneStatusIcon *obj) { + return obj->desc->impl_name; +} + +void linphone_status_icon_start(LinphoneStatusIcon *obj, LinphoneStatusIconParams *params) { + obj->params = linphone_status_icon_params_ref(params); + if(obj->desc->start) obj->desc->start(obj); +} + +void linphone_status_icon_enable_blinking(LinphoneStatusIcon *obj, gboolean enable) { + if(obj->desc->enable_blinking) obj->desc->enable_blinking(obj, enable); +} + +static void _linphone_status_icon_notify_click(LinphoneStatusIcon *obj) { + if(obj->params->on_click_cb) { + obj->params->on_click_cb(obj, obj->params->user_data); + } +} + + +void _linphone_status_icon_init_cb(const _LinphoneStatusIconDesc *desc, void *user_data) { + void **ctx = (void **)user_data; + LinphoneStatusIconReadyCb cb = (LinphoneStatusIconReadyCb)ctx[0]; + _linphone_status_icon_selected_desc = desc; + if(cb) cb(ctx[1]); + g_free(ctx); +} + +#ifdef STATUS_NOTIFIER_IS_USABLE +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_status_notifier; +#endif +#ifdef HAVE_GTK_OSX +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_gtkosx_app_desc; +#else +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_gtk_desc; +#endif + +void _linphone_status_icon_create_implementations_list(void) { +#ifdef STATUS_NOTIFIER_IS_USABLE + _linphone_status_icon_impls = g_slist_append(_linphone_status_icon_impls, (void *)&_linphone_status_icon_impl_status_notifier); +#endif +#if HAVE_GTK_OSX + _linphone_status_icon_impls = g_slist_append(_linphone_status_icon_impls, (void *)&_linphone_status_icon_impl_gtkosx_app_desc); +#else + _linphone_status_icon_impls = g_slist_append(_linphone_status_icon_impls, (void *)&_linphone_status_icon_impl_gtk_desc); +#endif +} + +gboolean linphone_status_icon_init(LinphoneStatusIconReadyCb ready_cb, void *user_data) { + const _LinphoneStatusIconDesc *desc; + void **ctx; + + _linphone_status_icon_create_implementations_list(); + + ctx = g_new(void *, 2); + ctx[0] = ready_cb; + ctx[1] = user_data; + if(_linphone_status_icon_find_first_available_impl(&desc, _linphone_status_icon_init_cb, ctx)) { + _linphone_status_icon_selected_desc = desc; + g_free(ctx); + return 1; + } else return 0; +} + +void linphone_status_icon_uninit(void) { + if(_linphone_status_icon_instance) _linphone_status_icon_free(_linphone_status_icon_instance); + if(_linphone_status_icon_impls) g_slist_free(_linphone_status_icon_impls); +} + +LinphoneStatusIcon *linphone_status_icon_get(void) { + if(_linphone_status_icon_instance == NULL) { + if(_linphone_status_icon_selected_desc) + _linphone_status_icon_instance = _linphone_status_icon_new(_linphone_status_icon_selected_desc); + } + return _linphone_status_icon_instance; +} + + +/* GtkStatusIcon implementation */ +#ifndef HAVE_GTK_OSX +static void _linphone_status_icon_impl_gtk_on_click_cb(LinphoneStatusIcon *si) { + _linphone_status_icon_notify_click(si); +} + +static void _linphone_status_icon_impl_gtk_popup_menu(GtkStatusIcon *status_icon, guint button, guint activate_time, LinphoneStatusIcon *si){ + GtkWidget *menu = si->params->menu; + gtk_menu_popup(GTK_MENU(menu),NULL,NULL,gtk_status_icon_position_menu,status_icon,button,activate_time); +} + +static void _linphone_status_icon_impl_gtk_init(LinphoneStatusIcon *si) { + const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON); + const char *call_icon_path=linphone_gtk_get_ui_config("start_call_icon","startcall-green.png"); + GdkPixbuf *pbuf=create_pixbuf(icon_path); + GtkStatusIcon *icon=gtk_status_icon_new_from_pixbuf(pbuf); + g_signal_connect_swapped(G_OBJECT(icon),"activate", G_CALLBACK(_linphone_status_icon_impl_gtk_on_click_cb), si); + g_signal_connect(G_OBJECT(icon), "popup-menu", G_CALLBACK(_linphone_status_icon_impl_gtk_popup_menu), si); + g_object_set_data_full(G_OBJECT(icon),"icon",pbuf, g_object_unref); + g_object_unref(pbuf); + pbuf=create_pixbuf(call_icon_path); + g_object_set_data_full(G_OBJECT(icon),"call_icon",pbuf, g_object_unref); + g_object_unref(pbuf); + si->data = icon; +} + +static void _linphone_status_icon_impl_gtk_uninit(LinphoneStatusIcon *si) { + GtkStatusIcon *icon = GTK_STATUS_ICON(si->data); + gtk_status_icon_set_visible(icon, FALSE); +} + +static void _linphone_status_icon_impl_gtk_start(LinphoneStatusIcon *si) { + GtkStatusIcon *icon = GTK_STATUS_ICON(si->data); +#if GTK_CHECK_VERSION(2,20,2) + char *name = g_strdup_printf("%s - %s", si->params->title, si->params->desc); + gtk_status_icon_set_name(icon, name); + g_free(name); +#endif + gtk_status_icon_set_visible(icon,TRUE); +} + +static gboolean _linphone_status_icon_impl_gtk_do_icon_blink_cb(GtkStatusIcon *gi){ + GdkPixbuf *call_icon=g_object_get_data(G_OBJECT(gi),"call_icon"); + GdkPixbuf *normal_icon=g_object_get_data(G_OBJECT(gi),"icon"); + GdkPixbuf *cur_icon=gtk_status_icon_get_pixbuf(gi); + if (cur_icon==call_icon){ + gtk_status_icon_set_from_pixbuf(gi,normal_icon); + }else{ + gtk_status_icon_set_from_pixbuf(gi,call_icon); + } + return TRUE; +} + +static void _linphone_status_icon_impl_enable_blinking(LinphoneStatusIcon *si, gboolean val) { + GtkStatusIcon *icon = GTK_STATUS_ICON(si->data); + guint tout; + tout=(unsigned)GPOINTER_TO_INT(g_object_get_data(G_OBJECT(icon),"timeout")); + if (val && tout==0){ + tout=g_timeout_add(500,(GSourceFunc)_linphone_status_icon_impl_gtk_do_icon_blink_cb,icon); + g_object_set_data(G_OBJECT(icon),"timeout",GINT_TO_POINTER(tout)); + }else if (!val && tout!=0){ + GdkPixbuf *normal_icon=g_object_get_data(G_OBJECT(icon),"icon"); + g_source_remove(tout); + g_object_set_data(G_OBJECT(icon),"timeout",NULL); + gtk_status_icon_set_from_pixbuf(icon,normal_icon); + } +} + +static gboolean _linphone_status_icon_impl_is_supported( + const _LinphoneStatusIconDesc *desc, + gboolean *result, + LinphoneStatusIconDescIsSupportedResultCb cb, + void *user_data) { + + *result = 1; + return 1; +} + +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_gtk_desc = { + "gtk_status_icon", + _linphone_status_icon_impl_gtk_init, + _linphone_status_icon_impl_gtk_uninit, + _linphone_status_icon_impl_gtk_start, + _linphone_status_icon_impl_enable_blinking, + _linphone_status_icon_impl_is_supported +}; +#endif + + +/* GtkosxApplication implementation */ +#ifdef HAVE_GTK_OSX +static void _linphone_status_icon_impl_gtkosx_app_enable_blinking(LinphoneStatusIcon *si, gboolean val) { + GtkosxApplication *theMacApp=gtkosx_application_get(); + gint *attention_id = (gint *)&si->data; + if (val && *attention_id == 0) { + *attention_id=gtkosx_application_attention_request(theMacApp,CRITICAL_REQUEST); + } else if(!val && *attention_id != 0) { + gtkosx_application_cancel_attention_request(theMacApp, *attention_id); + *attention_id = 0; + } +} + +static gboolean _linphone_status_icon_impl_gtkosx_app_is_supported( + const _LinphoneStatusIconDesc *desc, + gboolean *result, + LinphoneStatusIconDescIsSupportedResultCb cb, + void *user_data) { + + *result = 1; + return 1; +} + +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_gtkosx_app_desc = { + .impl_name = "gtkosx_application", + .init = NULL, + .uninit = NULL, + .start = NULL, + .enable_blinking = _linphone_status_icon_impl_gtkosx_app_enable_blinking, + .is_supported = _linphone_status_icon_impl_gtkosx_app_is_supported +}; +#endif + + +/* Implementation based on the StatusNotifier Freedesktop standard */ +#ifdef STATUS_NOTIFIER_IS_USABLE +typedef struct { + int x; + int y; +} _LinphoneStatusIconPosition; + +static void _linphone_status_icon_impl_sn_init(LinphoneStatusIcon *si) { + si->data = bc_status_notifier_new(); +} + +static void _linphone_status_icon_impl_sn_uninit(LinphoneStatusIcon *si) { + bc_status_notifier_unref((BcStatusNotifier *)si->data); +} + +static void _linphone_status_icon_impl_sn_activated_cb(BcStatusNotifier *sn, int x, int y, void *user_data) { + LinphoneStatusIcon *si = (LinphoneStatusIcon *)user_data; + _linphone_status_icon_notify_click(si); +} + +static void _linphone_status_icon_impr_sn_get_position(GtkMenu *menu, int *x, int *y, gboolean *push_in, gpointer data) { + _LinphoneStatusIconPosition *pos = (_LinphoneStatusIconPosition *)data; + *x = pos->x; + *y = pos->y; + *push_in = TRUE; +} + +static void _linphone_status_icon_impl_sn_menu_called_cb(BcStatusNotifier *sn, int x, int y, void *user_data) { + LinphoneStatusIcon *si = (LinphoneStatusIcon *)user_data; + GtkWidget *menu = si->params->menu; + _LinphoneStatusIconPosition pos = {x, y}; + gtk_menu_popup( + GTK_MENU(menu), + NULL, + NULL, + _linphone_status_icon_impr_sn_get_position, + &pos, + 0, + gtk_get_current_event_time() + ); +} + +static void _linphone_status_icon_impl_sn_start(LinphoneStatusIcon *si) { + BcStatusNotifier *sn = (BcStatusNotifier *)si->data; + BcStatusNotifierParams *params; + BcStatusNotifierToolTip *tooltip = bc_status_notifier_tool_tip_new("linphone", si->params->title, si->params->desc); + BcStatusNotifierSignalsVTable vtable = {NULL}; + + vtable.activate_called_cb = _linphone_status_icon_impl_sn_activated_cb; + vtable.context_menu_called_cb = _linphone_status_icon_impl_sn_menu_called_cb; + + params = bc_status_notifier_params_new(); + bc_status_notifier_params_set_dbus_prefix(params, "org.kde"); + bc_status_notifier_params_set_category(params, BcStatusNotifierCategoryCommunications); + bc_status_notifier_params_set_id(params, "linphone"); + bc_status_notifier_params_set_title(params, si->params->title); + bc_status_notifier_params_set_icon_name(params, "linphone"); + bc_status_notifier_params_set_tool_tip(params, tooltip); + bc_status_notifier_params_set_vtable(params, &vtable, si); + + bc_status_notifier_start(sn, params, NULL, NULL); + + bc_status_notifier_tool_tip_unref(tooltip); + bc_status_notifier_params_unref(params); +} + +static void _linphone_status_icon_impl_sn_enable_blinking(LinphoneStatusIcon *si, gboolean val) { + BcStatusNotifier *sn = (BcStatusNotifier *)si->data; + if(val) { + bc_status_notifier_update_status(sn, BcStatusNotifierStatusNeedsAttention); + } else { + bc_status_notifier_update_status(sn, BcStatusNotifierStatusPassive); + } +} + +static void _linphone_status_icon_impl_is_supported_cb(const char *prefix, gboolean result, void **data) { + _LinphoneStatusIconDesc *desc = (_LinphoneStatusIconDesc *)data[0]; + LinphoneStatusIconDescIsSupportedResultCb cb = (LinphoneStatusIconDescIsSupportedResultCb)data[1]; + if(cb) cb(desc, result, data[2]); + g_free(data); + g_free(desc); +} + +static gboolean _linphone_status_icon_impl_sn_is_supported( + const _LinphoneStatusIconDesc *desc, + gboolean *result, + LinphoneStatusIconDescIsSupportedResultCb cb, + void *user_data) { + + _LinphoneStatusIconDesc *desc2 = g_new(_LinphoneStatusIconDesc, 1); + void **data = g_new(void *, 3); + + *desc2 = *desc; + data[0] = desc2; + data[1] = cb; + data[2] = user_data; + bc_status_notifier_is_supported( + "org.kde", + (BcStatusNotifierSupportDetectionCb)_linphone_status_icon_impl_is_supported_cb, + data + ); + return 0; +} + +static const _LinphoneStatusIconDesc _linphone_status_icon_impl_status_notifier = { + .impl_name = "status_notifier", + .init = _linphone_status_icon_impl_sn_init, + .uninit = _linphone_status_icon_impl_sn_uninit, + .start = _linphone_status_icon_impl_sn_start, + .enable_blinking = _linphone_status_icon_impl_sn_enable_blinking, + .is_supported = _linphone_status_icon_impl_sn_is_supported +}; +#endif diff --git a/gtk/status_icon.h b/gtk/status_icon.h new file mode 100644 index 000000000..233733724 --- /dev/null +++ b/gtk/status_icon.h @@ -0,0 +1,53 @@ +/* +linphone, gtk-glade interface. +Copyright (C) 2015 Belledonne Communications + +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. +*/ + +/* + * LinphoneStatusIcon is an singleton interface which abstracts the + * technology used to manage the status icon. + */ + +#include +#include + +struct _LinphoneStatusIcon; +typedef void (*LinphoneStatusIconOnClickCallback)(struct _LinphoneStatusIcon *si, void *user_data); + + +typedef struct _LinphoneStatusIconParams LinphoneStatusIconParams; + +LinphoneStatusIconParams *linphone_status_icon_params_new(void); +LinphoneStatusIconParams *linphone_status_icon_params_ref(LinphoneStatusIconParams *obj); +void linphone_status_icon_params_unref(LinphoneStatusIconParams *obj); + +void linphone_status_icon_params_set_title(LinphoneStatusIconParams *obj, const char *title); +void linphone_status_icon_params_set_description(LinphoneStatusIconParams *obj, const char *desc); +void linphone_status_icon_params_set_menu(LinphoneStatusIconParams *obj, GtkWidget *menu); +void linphone_status_icon_params_set_on_click_cb(LinphoneStatusIconParams* obj, LinphoneStatusIconOnClickCallback cb, void *user_data); + + +typedef void (*LinphoneStatusIconReadyCb)(void *user_data); + +typedef struct _LinphoneStatusIcon LinphoneStatusIcon; + +gboolean linphone_status_icon_init(LinphoneStatusIconReadyCb ready_cb, void* user_data); +void linphone_status_icon_uninit(void); +LinphoneStatusIcon *linphone_status_icon_get(void); +const char *linphone_status_icon_get_implementation_name(const LinphoneStatusIcon *obj); +void linphone_status_icon_start(LinphoneStatusIcon *obj, LinphoneStatusIconParams *params); +void linphone_status_icon_enable_blinking(LinphoneStatusIcon *obj, gboolean enable); diff --git a/gtk/status_notifier.c b/gtk/status_notifier.c new file mode 100644 index 000000000..da9357720 --- /dev/null +++ b/gtk/status_notifier.c @@ -0,0 +1,644 @@ +/* +linphone, gtk-glade interface. +Copyright (C) 2015 Belledonne Communications + +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. +*/ + +#include "status_notifier.h" +#include +#include + +#ifdef _MSC_VER +#include +#define getpid() _getpid() +typedef int lppid_t; +#else +#include +typedef pid_t lppid_t; +#endif + +const gchar *bc_status_notifier_category_to_string(BcStatusNotifierCategory c) { + switch(c){ + case BcStatusNotifierCategoryApplicationStatus: + return "ApplicationStatus"; + case BcStatusNotifierCategoryCommunications: + return "Communications"; + case BcStatusNotifierCategorySystemService: + return "SystemServices"; + case BcStatusNotifierCategoryHardware: + return "Hardware"; + } + return "bad category"; +} + +const gchar *bc_status_notifier_status_to_string(BcStatusNotifierStatus s) { + switch(s){ + case BcStatusNotifierStatusPassive: + return "Passive"; + case BcStatusNotifierStatusActive: + return "Active"; + case BcStatusNotifierStatusNeedsAttention: + return "NeedsAttention"; + } + return "badstatus"; +}; + + +struct _BcStatusNotifierToolTip { + char *icon_name; + char *title; + char *text; + int ref; +}; + +BcStatusNotifierToolTip *bc_status_notifier_tool_tip_new(const char *icon_name, const char *title, const char *text) { + BcStatusNotifierToolTip *obj = (BcStatusNotifierToolTip *)g_new0(BcStatusNotifierToolTip, 1); + if(icon_name) obj->icon_name = g_strdup(icon_name); + if(title) obj->title = g_strdup(title); + if(text) obj->text = g_strdup(text); + return obj; +} + +BcStatusNotifierToolTip *bc_status_notifier_tool_tip_ref(BcStatusNotifierToolTip *obj) { + obj->ref++; + return obj; +} + +void bc_status_notifier_tool_tip_unref(BcStatusNotifierToolTip *obj) { + obj->ref--; + if(obj->ref < 0) { + if(obj->icon_name) g_free(obj->icon_name); + if(obj->title) g_free(obj->title); + if(obj->text) g_free(obj->text); + g_free(obj); + } +} + +static GVariant *_bc_status_notifier_tool_tip_to_variant(const BcStatusNotifierToolTip *obj) { + GVariant *attr[] = { + g_variant_new_string(obj->icon_name ? obj->icon_name : ""), + g_variant_new_array(G_VARIANT_TYPE_VARIANT, NULL, 0), + g_variant_new_string(obj->title ? obj->title : ""), + g_variant_new_string(obj->text ? obj->text : ""), + }; + return g_variant_new_tuple(attr, 4); +} + + +static const char *_bc_status_notifier_to_string[] = { + "vertical", + "horizontal", + NULL +}; + +static BcStatusNotifierOrientation _bc_status_notifier_orientation_from_string(const char *s) { + int i; + for(i=0; _bc_status_notifier_to_string[i] && g_strcmp0(s, _bc_status_notifier_to_string[i]) == 0; i++); + if(_bc_status_notifier_to_string[i]) return i; + else return BcStatusNotifierOrientationVertical; +} + + +struct _BcStatusNotifierParams{ + char *prefix; + int item_id; + BcStatusNotifierCategory category; + char *id; + char *title; + BcStatusNotifierStatus status; + guint32 window_id; + char *icon_name; + char *overlay_icon_name; + char *attention_icon_name; + char *attention_movie_name; + BcStatusNotifierToolTip *tool_tip; + BcStatusNotifierSignalsVTable vtable; + void *user_data; + int ref; +}; + +#define DEFAULT_PREFIX "org.freedesktop" + +BcStatusNotifierParams *bc_status_notifier_params_new(void) { + BcStatusNotifierParams *obj = (BcStatusNotifierParams *)g_new0(BcStatusNotifierParams, 1); + obj->prefix = g_strdup(DEFAULT_PREFIX); + return obj; +} + +BcStatusNotifierParams *bc_status_notifier_params_ref(BcStatusNotifierParams *obj) { + obj->ref++; + return obj; +} + +void bc_status_notifier_params_unref(BcStatusNotifierParams *obj) { + obj->ref--; + if(obj->ref < 0) { + if(obj->prefix) g_free(obj->prefix); + if(obj->id) g_free(obj->id); + if(obj->title) g_free(obj->title); + if(obj->icon_name) g_free(obj->icon_name); + if(obj->overlay_icon_name) g_free(obj->overlay_icon_name); + if(obj->attention_icon_name) g_free(obj->attention_icon_name); + if(obj->attention_movie_name) g_free(obj->attention_movie_name); + if(obj->tool_tip) bc_status_notifier_tool_tip_unref(obj->tool_tip); + g_free(obj); + } +} + +void bc_status_notifier_params_set_dbus_prefix(BcStatusNotifierParams *obj, const char *prefix) { + if(obj->prefix) g_free(obj->prefix); + if(prefix) obj->prefix = g_strdup(prefix); + else obj->prefix = NULL; +} + +const char *bc_satus_notifier_params_get_dbus_prefix(const BcStatusNotifierParams *obj) { + return obj->prefix; +} + +void bc_status_notifier_params_set_item_id(BcStatusNotifierParams *obj, int item_id) { + obj->item_id = item_id; +} + +int bc_status_notifier_params_get_item_id(const BcStatusNotifierParams *obj) { + return obj->item_id; +} + +void bc_status_notifier_params_set_category(BcStatusNotifierParams *obj, BcStatusNotifierCategory category) { + obj->category = category; +} + +BcStatusNotifierCategory bc_status_notifier_params_get_category(const BcStatusNotifierParams *obj) { + return obj->category; +} + +void bc_status_notifier_params_set_id(BcStatusNotifierParams *obj, const char *id) { + if(obj->id) g_free(obj->id); + if(id) obj->id = g_strdup(id); + else obj->id = NULL; +} + +const char *bc_status_notifier_params_get_id(const BcStatusNotifierParams *obj) { + return obj->id; +} + +void bc_status_notifier_params_set_title(BcStatusNotifierParams *obj, const char *title) { + if(obj->title) g_free(obj->title); + if(title) obj->title = g_strdup(title); + else obj->title = NULL; +} + +const char *bc_status_notifier_params_get_title(const BcStatusNotifierParams *obj) { + return obj->title; +} + +void bc_status_notifier_params_set_status(BcStatusNotifierParams *obj, BcStatusNotifierStatus status) { + obj->status = status; +} + +BcStatusNotifierStatus bc_status_notifier_params_get_status(const BcStatusNotifierParams *obj) { + return obj->status; +} + +void bc_status_notifier_params_set_window_id(BcStatusNotifierParams *obj, guint32 window_id) { + obj->window_id = window_id; +} + +guint32 bc_status_notifier_params_get_window_id(const BcStatusNotifierParams *obj) { + return obj->window_id; +} + +void bc_status_notifier_params_set_icon_name(BcStatusNotifierParams *obj, const char *name) { + if(obj->icon_name) g_free(obj->icon_name); + if(name) obj->icon_name = g_strdup(name); + else obj->icon_name = NULL; +} + +const char *bc_status_notifier_params_get_icon_name(const BcStatusNotifierParams *obj) { + return obj->icon_name; +} + +void bc_status_notifier_params_set_overlay_icon_name(BcStatusNotifierParams *obj, const char *name) { + if(obj->overlay_icon_name) g_free(obj->overlay_icon_name); + if(name) obj->overlay_icon_name = g_strdup(name); + else obj->overlay_icon_name = NULL; +} + +const char *bc_status_notifier_params_get_overlay_icon_name(const BcStatusNotifierParams *obj) { + return obj->overlay_icon_name; +} + +void bc_status_notifier_params_set_attention_icon_name(BcStatusNotifierParams *obj, const char *name) { + if(obj->attention_icon_name) g_free(obj->attention_icon_name); + if(name) obj->attention_icon_name = g_strdup(name); + else obj->attention_icon_name = NULL; +} + +const char *bc_status_notifier_params_get_attention_icon_name(const BcStatusNotifierParams *obj) { + return obj->attention_icon_name; +} + +void bc_status_notifier_params_set_attention_movie_name(BcStatusNotifierParams *obj, const char *name) { + if(obj->attention_movie_name) g_free(obj->attention_movie_name); + if(name) obj->attention_movie_name = g_strdup(name); + else obj->attention_movie_name = NULL; +} + +const char *bc_status_notifier_params_get_attention_movie_name(const BcStatusNotifierParams *obj) { + return obj->attention_movie_name; +} + +void bc_status_notifier_params_set_tool_tip(BcStatusNotifierParams *obj, BcStatusNotifierToolTip *tool_tip) { + if(obj->tool_tip) bc_status_notifier_tool_tip_unref(obj->tool_tip); + if(tool_tip) obj->tool_tip = bc_status_notifier_tool_tip_ref(tool_tip); + else obj->tool_tip = NULL; +} + +const BcStatusNotifierToolTip *bc_status_notifier_params_get_tool_tip(const BcStatusNotifierParams *obj) { + return obj->tool_tip; +} + +void bc_status_notifier_params_set_vtable(BcStatusNotifierParams *obj, const BcStatusNotifierSignalsVTable *vtable, void *user_data) { + obj->vtable = *vtable; + obj->user_data = user_data; +} + + +struct _BcStatusNotifier { + BcStatusNotifierParams *params; + guint bus_owner_id; + GDBusConnection *conn; + BcStatusNotifierState state; + BcStatusNotifierStateVTable vtable; + void *user_data; + int ref; +}; + +#define ITEM_NAME "StatusNotifierItem" +#define WATCHER_NAME "StatusNotifierWatcher" +#define CALL_TIMEOUT 1000 + +#define STATUS_NOTIFIER_INTROSPECTION_DATA \ + " \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + \ + " + +BcStatusNotifier *bc_status_notifier_new(void) { + return (BcStatusNotifier *)g_new0(BcStatusNotifier, 1); +} + +BcStatusNotifier *bc_status_notifier_ref(BcStatusNotifier *obj) { + obj->ref++; + return obj; +} + +void bc_status_notifier_unref(BcStatusNotifier *obj) { + obj->ref--; + if(obj->ref < 0) { + bc_status_notifier_stop(obj); + if(obj->params) bc_status_notifier_params_unref(obj->params); + g_free(obj); + } +} + +static GVariant *_bc_status_notifier_get_property_cb( + GDBusConnection *connection, + const gchar *sender, + const gchar *object_path, + const gchar *interface_name, + const gchar *property_name, + GError **error, + BcStatusNotifier *sn) { + + + GVariant *value = NULL; + if(g_strcmp0(property_name, "Category") == 0) { + value = g_variant_new_string(bc_status_notifier_category_to_string(sn->params->category)); + } else if(g_strcmp0(property_name, "Id") == 0) { + value = g_variant_new_string(sn->params->id ? sn->params->id : ""); + } else if(g_strcmp0(property_name, "Title") == 0) { + value = g_variant_new_string(sn->params->title ? sn->params->title : ""); + } else if(g_strcmp0(property_name, "Status") == 0) { + value = g_variant_new_string(bc_status_notifier_status_to_string(sn->params->status)); + } else if(g_strcmp0(property_name, "WindowId") == 0) { + value = g_variant_new_uint32(sn->params->window_id); + } else if(g_strcmp0(property_name, "IconName") == 0) { + value = g_variant_new_string(sn->params->icon_name ? sn->params->icon_name : ""); + } else if(g_strcmp0(property_name, "IconPixmap") == 0) { + value = g_variant_new_array(G_VARIANT_TYPE_VARIANT, NULL, 0); + } else if(g_strcmp0(property_name, "OverlayIconName") == 0) { + value = g_variant_new_string(sn->params->overlay_icon_name ? sn->params->overlay_icon_name : ""); + } else if(g_strcmp0(property_name, "OverlayIconPixmap") == 0) { + value = g_variant_new_array(G_VARIANT_TYPE_VARIANT, NULL, 0); + } else if(g_strcmp0(property_name, "AttentionIconName") == 0) { + value = g_variant_new_string(sn->params->attention_icon_name ? sn->params->attention_icon_name : ""); + } else if(g_strcmp0(property_name, "AttentionIconPixmap") == 0) { + value = g_variant_new_array(G_VARIANT_TYPE_VARIANT, NULL, 0); + } else if(g_strcmp0(property_name, "AttentionMovieName") == 0) { + value = g_variant_new_string(sn->params->attention_movie_name ? sn->params->attention_movie_name : ""); + } else if(g_strcmp0(property_name, "ToolTip") == 0) { + if(sn->params->tool_tip) { + value = _bc_status_notifier_tool_tip_to_variant(sn->params->tool_tip); + } else { + BcStatusNotifierToolTip *tool_tip = bc_status_notifier_tool_tip_new("", "", ""); + value = _bc_status_notifier_tool_tip_to_variant(tool_tip); + bc_status_notifier_tool_tip_unref(tool_tip); + } + } + return value; +} + +static void _bc_status_notifier_method_call_cb( + GDBusConnection *connection, + const gchar *sender, + const gchar *object_path, + const gchar *interface_name, + const gchar *method_name, + GVariant *parameters, + GDBusMethodInvocation *invocation, + BcStatusNotifier *sn) { + + if(g_strcmp0(method_name, "ContextMenu") == 0) { + if(sn->params->vtable.context_menu_called_cb) { + int x, y; + g_variant_get_child(parameters, 0, "i", &x); + g_variant_get_child(parameters, 1, "i", &y); + sn->params->vtable.context_menu_called_cb(sn, x, y, sn->params->user_data); + } + } else if(g_strcmp0(method_name, "Activate") == 0) { + if(sn->params->vtable.activate_called_cb) { + int x, y; + g_variant_get_child(parameters, 0, "i", &x); + g_variant_get_child(parameters, 1, "i", &y); + sn->params->vtable.activate_called_cb(sn, x, y, sn->params->user_data); + } + } else if(g_strcmp0(method_name, "SecondaryActivate") == 0) { + if(sn->params->vtable.secondary_activate_called_cb) { + int x, y; + g_variant_get_child(parameters, 0, "i", &x); + g_variant_get_child(parameters, 1, "i", &y); + sn->params->vtable.secondary_activate_called_cb(sn, x, y, sn->params->user_data); + } + } else if(g_strcmp0(method_name, "Scroll") == 0) { + if(sn->params->vtable.scroll_called_cb) { + int delta; + BcStatusNotifierOrientation orient; + char *orient_str; + g_variant_get_child(parameters, 0, "i", &delta); + g_variant_get_child(parameters, 1, "&s", &orient_str); + orient = _bc_status_notifier_orientation_from_string(orient_str); + sn->params->vtable.scroll_called_cb(sn, delta, orient, sn->params->user_data); + } + } + g_dbus_method_invocation_return_value(invocation, NULL); +} + +static void _bc_status_notifier_bus_acquired_cb(GDBusConnection *conn, const gchar *name, BcStatusNotifier *sn) { + char *interface_name = g_strdup_printf("%s.%s", sn->params->prefix, ITEM_NAME); + char *item_path = g_strdup_printf("/%s", ITEM_NAME); + GDBusInterfaceVTable vtable = { + (GDBusInterfaceMethodCallFunc)_bc_status_notifier_method_call_cb, + (GDBusInterfaceGetPropertyFunc)_bc_status_notifier_get_property_cb, + NULL + }; + + GDBusNodeInfo *node_info = g_dbus_node_info_new_for_xml(STATUS_NOTIFIER_INTROSPECTION_DATA, NULL); + GDBusInterfaceInfo *interface = g_dbus_node_info_lookup_interface( + node_info, + interface_name + ); + g_free(interface_name); + + sn->conn = conn; + + g_dbus_connection_register_object( + conn, + item_path, + interface, + &vtable, + bc_status_notifier_ref(sn), + (GDestroyNotify)bc_status_notifier_unref, + NULL + ); + g_free(item_path); + + g_dbus_node_info_unref(node_info); +} + +static void _bc_status_notifier_name_acquired_cb(GDBusConnection *conn, const gchar *name, BcStatusNotifier *sn) { + GVariant *item_name = g_variant_new_string(name); + GVariant *parameters = g_variant_new_tuple(&item_name, 1); + char *watcher_bus_name = g_strdup_printf("%s.%s", sn->params->prefix, WATCHER_NAME); + char *watcher_interface_name = watcher_bus_name; + char *watcher_path = g_strdup_printf("/%s", WATCHER_NAME); + + g_dbus_connection_call( + conn, + watcher_bus_name, + watcher_path, + watcher_interface_name, + "RegisterStatusNotifierItem", + parameters, + NULL, + G_DBUS_CALL_FLAGS_NONE, + CALL_TIMEOUT, + NULL, + NULL, + NULL + ); + g_free(watcher_bus_name); + g_free(watcher_path); + + sn->state = BcStatusNotifierStateRunning; + if(sn->vtable.success) sn->vtable.success(sn, sn->user_data); +} + +static void _bc_status_notifier_name_lost(GDBusConnection *conn, const gchar *name, BcStatusNotifier *sn) { + if(conn == NULL) { + sn->state = BcStatusNotifierStateStopped; + if(sn->vtable.fail) sn->vtable.fail(sn, sn->user_data); + } +} + +void bc_status_notifier_start(BcStatusNotifier* obj, BcStatusNotifierParams* params, const BcStatusNotifierStateVTable *vtable, void *user_data) { + if(obj->state == BcStatusNotifierStateStopped) { + lppid_t pid = getpid(); + char *dbus_name = g_strdup_printf("%s.%s-%d-%d", params->prefix, ITEM_NAME, pid, params->item_id); + + if(obj->params) bc_status_notifier_params_unref(obj->params); + obj->params = bc_status_notifier_params_ref(params); + if(vtable) obj->vtable = *vtable; + else { + obj->vtable.success = NULL; + obj->vtable.fail = NULL; + } + obj->user_data = user_data; + obj->state = BcStatusNotifierStateStarting; + obj->bus_owner_id = g_bus_own_name( + G_BUS_TYPE_SESSION, + dbus_name, + G_BUS_NAME_OWNER_FLAGS_NONE, + (GBusAcquiredCallback)_bc_status_notifier_bus_acquired_cb, + (GBusNameAcquiredCallback)_bc_status_notifier_name_acquired_cb, + (GBusNameLostCallback)_bc_status_notifier_name_lost, + bc_status_notifier_ref(obj), + (GDestroyNotify)bc_status_notifier_unref + ); + g_free(dbus_name); + } +} + +void bc_status_notifier_stop(BcStatusNotifier *obj) { + if(obj->state == BcStatusNotifierStateRunning) { + g_bus_unown_name(obj->bus_owner_id); + obj->bus_owner_id = 0; + obj->conn = NULL; + obj->state = BcStatusNotifierStateStopped; + } +} + +const BcStatusNotifierParams *bc_status_notifier_get_params(const BcStatusNotifier *obj) { + return obj->params; +} + +static void _bc_status_notifier_emit_signal(const BcStatusNotifier *obj, const char *sig_name, GVariant *parameters) { + char *item_interface_name = g_strdup_printf("%s.%s", obj->params->prefix, ITEM_NAME); + char *item_path = g_strdup_printf("/%s", ITEM_NAME); + g_dbus_connection_emit_signal( + obj->conn, + NULL, + item_path, + item_interface_name, + sig_name, + parameters, + NULL + ); + g_free(item_interface_name); + g_free(item_path); +} + +void bc_status_notifier_update_title(BcStatusNotifier *obj, const char *title) { + bc_status_notifier_params_set_title(obj->params, title); + _bc_status_notifier_emit_signal(obj, "NewTitle", NULL); +} + +void bc_status_notifier_update_icon(BcStatusNotifier *obj, const char *icon_name) { + bc_status_notifier_params_set_icon_name(obj->params, icon_name); + _bc_status_notifier_emit_signal(obj, "NewIcon", NULL); +} + +void bc_status_notifier_update_attention_icon(BcStatusNotifier *obj, const char *icon_name) { + bc_status_notifier_params_set_attention_icon_name(obj->params, icon_name); + _bc_status_notifier_emit_signal(obj, "NewAttentionIcon", NULL); +} + +void bc_status_notifier_update_overlay_icon(BcStatusNotifier *obj, const char *icon_name) { + bc_status_notifier_params_set_overlay_icon_name(obj->params, icon_name); + _bc_status_notifier_emit_signal(obj, "NewOverlayIcon", NULL); +} + +void bc_status_notifier_update_tool_tip(BcStatusNotifier *obj, BcStatusNotifierToolTip *tool_tip) { + bc_status_notifier_params_set_tool_tip(obj->params, tool_tip); + _bc_status_notifier_emit_signal(obj, "NewToolTip", NULL); +} + +void bc_status_notifier_update_status(BcStatusNotifier *obj, BcStatusNotifierStatus status) { + GVariant *status_var = g_variant_new_string(bc_status_notifier_status_to_string(status)); + GVariant *parameter = g_variant_new_tuple(&status_var, 1); + bc_status_notifier_params_set_status(obj->params, status); + _bc_status_notifier_emit_signal(obj, "NewStatus", parameter); +} + + +typedef struct _BcWatcherDetectionCtx { + char *prefix; + guint watcher_id; + BcStatusNotifierSupportDetectionCb cb; + void *user_data; +} BcWatcherDetectionCtx; + +static void _bc_watcher_detection_ctx_free(BcWatcherDetectionCtx *obj) { + g_free(obj->prefix); + g_free(obj); +} + +static void _bc_watcher_name_appeared_cb(GDBusConnection *conn, const char *name, const char *name_owner, BcWatcherDetectionCtx *ctx) { + g_bus_unwatch_name(ctx->watcher_id); + if(ctx->cb) ctx->cb(ctx->prefix, 1, ctx->user_data); +} + +static void _bc_watcher_name_vannished_cb(GDBusConnection *conn, const char *name, BcWatcherDetectionCtx *ctx) { + g_bus_unwatch_name(ctx->watcher_id); + if(ctx->cb) ctx->cb(ctx->prefix, 0, ctx->user_data); +} + +void bc_status_notifier_is_supported(const char* prefix, BcStatusNotifierSupportDetectionCb cb, void *user_data) { + char *bus_name = g_strdup_printf("%s.%s", prefix, WATCHER_NAME); + BcWatcherDetectionCtx *ctx = (BcWatcherDetectionCtx *)g_new0(BcWatcherDetectionCtx, 1); + ctx->prefix = g_strdup(prefix); + ctx->cb = cb; + ctx->user_data = user_data; + + ctx->watcher_id = g_bus_watch_name( + G_BUS_TYPE_SESSION, + bus_name, + G_BUS_NAME_WATCHER_FLAGS_NONE, + (GBusNameAppearedCallback)_bc_watcher_name_appeared_cb, + (GBusNameVanishedCallback)_bc_watcher_name_vannished_cb, + ctx, + (GDestroyNotify)_bc_watcher_detection_ctx_free + ); + g_free(bus_name); +} diff --git a/gtk/status_notifier.h b/gtk/status_notifier.h new file mode 100644 index 000000000..b8067fdeb --- /dev/null +++ b/gtk/status_notifier.h @@ -0,0 +1,163 @@ +/* +linphone, gtk-glade interface. +Copyright (C) 2015 Belledonne Communications + +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. +*/ + +/** + * BcStatusNotifier is an implementation of the StatusNotiferItem standard defined by freedesktop.org. + * It is a new way to manage status icons on GNU/Linux systems by using D-Bus. It is implemented by + * Unity desktop environmemt and it is the only way to create status icons on KDE 5. + * Visit http://freedesktop.org/wiki/Specifications/StatusNotifierItem/ for more information. + */ + +#ifndef STATUS_NOTIFIER_H +#define STATUS_NOTIFIER_H + +#include + +struct _BcStatusNotifier; + + +typedef enum { + BcStatusNotifierCategoryApplicationStatus, + BcStatusNotifierCategoryCommunications, + BcStatusNotifierCategorySystemService, + BcStatusNotifierCategoryHardware +} BcStatusNotifierCategory; + +const gchar *bc_status_notifier_category_to_string(BcStatusNotifierCategory c); + + +typedef enum { + BcStatusNotifierStatusPassive, + BcStatusNotifierStatusActive, + BcStatusNotifierStatusNeedsAttention +} BcStatusNotifierStatus; + +const gchar *bc_status_notifier_status_to_string(BcStatusNotifierStatus s); + + +typedef struct _BcStatusNotifierToolTip BcStatusNotifierToolTip; + +BcStatusNotifierToolTip *bc_status_notifier_tool_tip_new(const char *icon_name, const char *title, const char *text); +BcStatusNotifierToolTip *bc_status_notifier_tool_tip_ref(BcStatusNotifierToolTip *obj); +void bc_status_notifier_tool_tip_unref(BcStatusNotifierToolTip *obj); + + +typedef enum _BcStatusNotifierOrientation { + BcStatusNotifierOrientationVertical, + BcStatusNotifierOrientationHorizontal +} BcStatusNotifierOrientation; + + +typedef void (*BcStatusNotifierContextMenuCalledCb)(struct _BcStatusNotifier *sn, int x, int y, void *user_data); +typedef void (*BcStatusNotifierActivateCalledCb)(struct _BcStatusNotifier *sn, int x, int y, void *user_data); +typedef void (*BcStatusNotifierSecondaryActivateCb)(struct _BcStatusNotifier *sn, int x, int y, void *user_data); +typedef void (*BcStatusNotifierScrollCalledCb)(struct _BcStatusNotifier *sn, int delta, BcStatusNotifierOrientation o, void *user_data); + +typedef struct _BcStatusNotifierSignalsVTable { + BcStatusNotifierContextMenuCalledCb context_menu_called_cb; + BcStatusNotifierActivateCalledCb activate_called_cb; + BcStatusNotifierSecondaryActivateCb secondary_activate_called_cb; + BcStatusNotifierScrollCalledCb scroll_called_cb; +} BcStatusNotifierSignalsVTable; + + +typedef struct _BcStatusNotifierParams BcStatusNotifierParams; + +BcStatusNotifierParams *bc_status_notifier_params_new(void); +BcStatusNotifierParams *bc_status_notifier_params_ref(BcStatusNotifierParams *obj); +void bc_status_notifier_params_unref(BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_dbus_prefix(BcStatusNotifierParams *obj, const char *prefix); +const char *bc_satus_notifier_params_get_dbus_prefix(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_item_id(BcStatusNotifierParams *obj, int item_id); +int bc_status_notifier_params_get_item_id(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_category(BcStatusNotifierParams *obj, BcStatusNotifierCategory category); +BcStatusNotifierCategory bc_status_notifier_params_get_category(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_id(BcStatusNotifierParams *obj, const char *id); +const char *bc_status_notifier_params_get_id(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_title(BcStatusNotifierParams *obj, const char *title); +const char *bc_status_notifier_params_get_title(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_status(BcStatusNotifierParams *obj, BcStatusNotifierStatus status); +BcStatusNotifierStatus bc_status_notifier_params_get_status(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_window_id(BcStatusNotifierParams *obj, guint32 window_id); +guint32 bc_status_notifier_params_get_window_id(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_icon_name(BcStatusNotifierParams *obj, const char *name); +const char *bc_status_notifier_params_get_icon_name(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_overlay_icon_name(BcStatusNotifierParams *obj, const char *name); +const char *bc_status_notifier_params_get_overlay_icon_name(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_attention_icon_name(BcStatusNotifierParams *obj, const char *icon_name); +const char *bc_status_notifier_params_get_attention_icon_name(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_attention_movie_name(BcStatusNotifierParams *obj, const char *name); +const char *bc_status_notifier_params_get_attention_movie_name(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_tool_tip(BcStatusNotifierParams *obj, BcStatusNotifierToolTip *tool_tip); +const BcStatusNotifierToolTip *bc_status_notifier_params_get_tool_tip(const BcStatusNotifierParams *obj); + +void bc_status_notifier_params_set_vtable(BcStatusNotifierParams *obj, const BcStatusNotifierSignalsVTable *vtable, void *user_data); + + +typedef enum _BcStatusNotifierState { + BcStatusNotifierStateStopped, + BcStatusNotifierStateStarting, + BcStatusNotifierStateRunning +} BcStatusNotifierState; + + +typedef void (*BcStatusNotifierStartedCb)(struct _BcStatusNotifier *sn, void *user_data); +typedef void (*BcStatusNotifierStartingFailedCb)(struct _BcStatusNotifier *sn, void *user_data); + +typedef struct _BcStatusNotifierStateVTable { + BcStatusNotifierStartedCb success; + BcStatusNotifierStartingFailedCb fail; +} BcStatusNotifierStateVTable; + + +typedef struct _BcStatusNotifier BcStatusNotifier; + +BcStatusNotifier *bc_status_notifier_new(void); +BcStatusNotifier *bc_status_notifier_ref(BcStatusNotifier *obj); +void bc_status_notifier_unref(BcStatusNotifier *obj); + +void bc_status_notifier_start(BcStatusNotifier* obj, BcStatusNotifierParams* params, const BcStatusNotifierStateVTable* vtable, void* user_data); +void bc_status_notifier_stop(BcStatusNotifier* obj); + +const BcStatusNotifierParams *bc_status_notifier_get_params(const BcStatusNotifier *obj); +void bc_status_notifier_update_title(BcStatusNotifier* obj, const char* title); +void bc_status_notifier_update_icon(BcStatusNotifier* obj, const char* icon_name); +void bc_status_notifier_update_attention_icon(BcStatusNotifier* obj, const char* icon_name); +void bc_status_notifier_update_overlay_icon(BcStatusNotifier* obj, const char* icon_name); +void bc_status_notifier_update_tool_tip(BcStatusNotifier* obj, BcStatusNotifierToolTip* tool_tip); +void bc_status_notifier_update_status(BcStatusNotifier* obj, BcStatusNotifierStatus status); + + +typedef void (*BcStatusNotifierSupportDetectionCb)(const char *prefix, gboolean is_supported, void *user_data); + +void bc_status_notifier_is_supported(const char* prefix, BcStatusNotifierSupportDetectionCb cb, void *user_data); + +#endif \ No newline at end of file diff --git a/gtk/utils.c b/gtk/utils.c index b8db633d8..c03ea462b 100644 --- a/gtk/utils.c +++ b/gtk/utils.c @@ -102,14 +102,14 @@ void linphone_gtk_reload_sound_devices(void){ GtkWidget *mw=linphone_gtk_get_main_window(); GtkWidget *pb=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters"); linphone_core_reload_sound_devices(linphone_gtk_get_core()); - linphone_gtk_fill_soundcards(pb); + if (pb) linphone_gtk_fill_soundcards(pb); } void linphone_gtk_reload_video_devices(void){ GtkWidget *mw=linphone_gtk_get_main_window(); GtkWidget *pb=(GtkWidget*)g_object_get_data(G_OBJECT(mw),"parameters"); linphone_core_reload_video_devices(linphone_gtk_get_core()); - linphone_gtk_fill_webcams(pb); + if (pb) linphone_gtk_fill_webcams(pb); } #ifdef HAVE_LIBUDEV_H diff --git a/include/sal/sal.h b/include/sal/sal.h index 26d8e5bb9..ac0aed989 100644 --- a/include/sal/sal.h +++ b/include/sal/sal.h @@ -68,15 +68,20 @@ typedef enum { SalTransportDTLS, /*DTLS*/ }SalTransport; -#define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00 -#define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED (1) -#define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED (1<<1) -#define SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED (1<<2) -#define SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED (1<<3) -#define SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED (1<<4) +#define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00 +#define SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED (1) +#define SAL_MEDIA_DESCRIPTION_CODEC_CHANGED (1<<1) +#define SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED (1<<2) +#define SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED (1<<3) +#define SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED (1<<4) +#define SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED (1<<5) /* use to notify when switching from multicast to unicast*/ -#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED | SAL_MEDIA_DESCRIPTION_CODEC_CHANGED |\ - SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED |SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED | SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED) +#define SAL_MEDIA_DESCRIPTION_CHANGED (SAL_MEDIA_DESCRIPTION_NETWORK_CHANGED \ + |SAL_MEDIA_DESCRIPTION_CODEC_CHANGED \ + |SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED \ + |SAL_MEDIA_DESCRIPTION_CRYPTO_POLICY_CHANGED \ + |SAL_MEDIA_DESCRIPTION_STREAMS_CHANGED \ + |SAL_MEDIA_DESCRIPTION_NETWORK_XXXCAST_CHANGED) const char* sal_transport_to_string(SalTransport transport); SalTransport sal_transport_parse(const char*); diff --git a/java/common/org/linphone/core/LinphoneCallParams.java b/java/common/org/linphone/core/LinphoneCallParams.java index 7086a56fb..fa827faa2 100644 --- a/java/common/org/linphone/core/LinphoneCallParams.java +++ b/java/common/org/linphone/core/LinphoneCallParams.java @@ -131,4 +131,31 @@ public interface LinphoneCallParams { * @return The received video size. */ VideoSize getReceivedVideoSize(); + /** + * Use to enable multicast rtp for audio stream. + * * If enabled, outgoing calls put a multicast address from #linphone_core_get_video_multicast_addr into audio cline. In case of outgoing call audio stream is sent to this multicast address. + *
For incoming calls behavior is unchanged. + * @param yesno if yes, subsequent calls will propose multicast ip set by LinphoneCore.setAudioMulticastAddr + **/ + void enableAudioMulticast(boolean yesno); + + /** + * Use to get multicast state of audio stream. + * @return true if subsequent calls will propose multicast ip set by LinphoneCore.setAudioMulticastAddr + **/ + boolean audioMulticastEnabled(); + + /** + * Use to enable multicast rtp for video stream. + * If enabled, outgoing calls put a multicast address from #linphone_core_get_video_multicast_addr into video cline. In case of outgoing call video stream is sent to this multicast address. + *
For incoming calls behavior is unchanged. + * @param yesno if yes, subsequent outgoing calls will propose multicast ip set by LinphoneCore.setVideoMulticastAddr + **/ + void enableVideoMulticast(boolean yesno); + /** + * Use to get multicast state of video stream. + * @return true if subsequent calls will propose multicast ip set by LinphoneCore.setVideoMulticastAddr + **/ + boolean videoMulticastEnabled(); + } diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index 2c4616dd8..33f917b7c 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -889,6 +889,12 @@ public interface LinphoneCore { */ void addFriend(LinphoneFriend lf) throws LinphoneCoreException; + /** + * Get list of LinphoneFriend + * @return LinphoneFriend list + */ + LinphoneFriend[] getFriendList(); + /** * @brief Set my presence status * @param minutes_away how long in away diff --git a/java/common/org/linphone/core/LinphoneProxyConfig.java b/java/common/org/linphone/core/LinphoneProxyConfig.java index 8b668da2e..e5381701e 100644 --- a/java/common/org/linphone/core/LinphoneProxyConfig.java +++ b/java/common/org/linphone/core/LinphoneProxyConfig.java @@ -306,6 +306,13 @@ public interface LinphoneProxyConfig { **/ void setUserData(Object obj); + /** + * Detect if the given input is a phone number or not. + * @param username string to parse. + * @return TRUE if input is a phone number, FALSE otherwise. + **/ + boolean isPhoneNumber(String username); + /** * Returns user data from a proxy config. return null if any * @return an Object. diff --git a/java/impl/org/linphone/core/LinphoneCallParamsImpl.java b/java/impl/org/linphone/core/LinphoneCallParamsImpl.java index a3c6425b8..c4b356fa7 100644 --- a/java/impl/org/linphone/core/LinphoneCallParamsImpl.java +++ b/java/impl/org/linphone/core/LinphoneCallParamsImpl.java @@ -150,4 +150,25 @@ public class LinphoneCallParamsImpl implements LinphoneCallParams { vSize.height = nativeSize[1]; return vSize; } + private native void enableAudioMulticast(long ptr,boolean yesno); + @Override + public void enableAudioMulticast(boolean yesno) { + enableAudioMulticast(nativePtr,yesno); + } + private native boolean audioMulticastEnabled(long ptr); + @Override + public boolean audioMulticastEnabled() { + return audioMulticastEnabled(nativePtr); + } + private native void enableVideoMulticast(long ptr,boolean yesno); + + @Override + public void enableVideoMulticast(boolean yesno) { + enableVideoMulticast(nativePtr,yesno); + } + private native boolean videoMulticastEnabled(long ptr); + @Override + public boolean videoMulticastEnabled() { + return videoMulticastEnabled(nativePtr); + } } diff --git a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java index 5b2a87c55..0d6fc777b 100644 --- a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -20,6 +20,7 @@ package org.linphone.core; import java.io.File; import java.io.IOException; +import java.util.List; import org.linphone.mediastream.MediastreamerAndroidContext; import org.linphone.mediastream.Version; @@ -33,30 +34,41 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { System.loadLibrary(s); return true; } catch (Throwable e) { - Log.w("Unable to load optional library lib", s); + Log.w("LinphoneCoreFactoryImpl", "Unable to load optional library lib" + s); } return false; } static { - String eabi = "armeabi"; - if (Version.isX86()) { - eabi = "x86"; - } else if (Version.isArmv7()) { - eabi = "armeabi-v7a"; + List cpuabis=Version.getCpuAbis(); + String ffmpegAbi; + boolean libLoaded=false; + Throwable firstException=null; + for (String abi : cpuabis){ + Log.i("LinphoneCoreFactoryImpl","Trying to load liblinphone for " + abi); + ffmpegAbi=abi; + // FFMPEG (audio/video) + if (abi.startsWith("armeabi")) { + ffmpegAbi="arm"; + } + loadOptionalLibrary("ffmpeg-linphone-"+ffmpegAbi); + //Main library + try { + System.loadLibrary("linphone-" + abi); + Log.i("LinphoneCoreFactoryImpl","Loading done with " + abi); + libLoaded=true; + break; + }catch(Throwable e) { + if (firstException == null) firstException=e; + } } - - // FFMPEG (audio/video) - if (Version.isX86()) { - loadOptionalLibrary("ffmpeg-linphone-x86"); - } else if (Version.isArmv7()) { - loadOptionalLibrary("ffmpeg-linphone-arm"); + + if (!libLoaded){ + throw new RuntimeException(firstException); + + }else{ + Version.dumpCapabilities(); } - - //Main library - System.loadLibrary("linphone-" + eabi); - - Version.dumpCapabilities(); } @Override public LinphoneAuthInfo createAuthInfo(String username, String password, diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index 80d007172..3e7fd1910 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -92,6 +92,7 @@ class LinphoneCoreImpl implements LinphoneCore { private native void setPreviewWindowId(long nativePtr, Object wid); private native void setDeviceRotation(long nativePtr, int rotation); private native void addFriend(long nativePtr,long friend); + private native LinphoneFriend[] getFriendList(long nativePtr); private native void setPresenceInfo(long nativePtr, int minutes_away, String alternative_contact, int status); private native int getPresenceInfo(long nativePtr); private native void setPresenceModel(long nativePtr, long presencePtr); @@ -433,8 +434,12 @@ class LinphoneCoreImpl implements LinphoneCore { public synchronized void addFriend(LinphoneFriend lf) throws LinphoneCoreException { addFriend(nativePtr,((LinphoneFriendImpl)lf).nativePtr); - } + + public synchronized LinphoneFriend[] getFriendList() { + return getFriendList(nativePtr); + } + @SuppressWarnings("deprecation") public synchronized void setPresenceInfo(int minutes_away, String alternative_contact, OnlineStatus status) { setPresenceInfo(nativePtr,minutes_away,alternative_contact,status.mValue); @@ -955,14 +960,10 @@ class LinphoneCoreImpl implements LinphoneCore { removeFriend(nativePtr, lf.getNativePtr()); } - private native long getFriendByAddress(long ptr, String sipUri); + private native LinphoneFriend getFriendByAddress(long ptr, String sipUri); @Override public synchronized LinphoneFriend findFriendByAddress(String sipUri) { - long ptr = getFriendByAddress(nativePtr, sipUri); - if (ptr == 0) { - return null; - } - return new LinphoneFriendImpl(ptr); + return getFriendByAddress(nativePtr, sipUri); } public synchronized void setAudioPort(int port) { diff --git a/java/impl/org/linphone/core/LinphoneFriendImpl.java b/java/impl/org/linphone/core/LinphoneFriendImpl.java index 2285f3788..ba47eccb4 100644 --- a/java/impl/org/linphone/core/LinphoneFriendImpl.java +++ b/java/impl/org/linphone/core/LinphoneFriendImpl.java @@ -22,6 +22,7 @@ import java.io.Serializable; class LinphoneFriendImpl implements LinphoneFriend, Serializable { protected final long nativePtr; + private native void finalize(long nativePtr); private native long newLinphoneFriend(String friendUri); private native void setAddress(long nativePtr,long friend); private native long getAddress(long nativePtr); @@ -34,24 +35,26 @@ class LinphoneFriendImpl implements LinphoneFriend, Serializable { private native void setPresenceModel(long nativePtr, long presencePtr); private native void edit(long nativePtr); private native void done(long nativePtr); - private native void delete(long ptr); private native Object getCore(long ptr); private native void setRefKey(long nativePtr, String key); private native String getRefKey(long nativePtr); - - boolean ownPtr = false; + protected LinphoneFriendImpl() { nativePtr = newLinphoneFriend(null); - } + } protected LinphoneFriendImpl(String friendUri) { nativePtr = newLinphoneFriend(friendUri); } + + /*reserved for JNI */ protected LinphoneFriendImpl(long aNativePtr) { nativePtr = aNativePtr; - ownPtr=false; } protected void finalize() throws Throwable { - if (ownPtr) delete(nativePtr); + if (nativePtr != 0) { + finalize(nativePtr); + } + super.finalize(); } public void setAddress(LinphoneAddress anAddress) { this.setAddress(nativePtr, ((LinphoneAddressImpl)anAddress).nativePtr); diff --git a/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java b/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java index f08980190..33ac36f8f 100644 --- a/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java +++ b/java/impl/org/linphone/core/LinphoneProxyConfigImpl.java @@ -362,6 +362,12 @@ class LinphoneProxyConfigImpl implements LinphoneProxyConfig { return getPublishExpires(nativePtr); } + private native boolean isPhoneNumber(long nativePtr,String username); + @Override + public boolean isPhoneNumber(String username){ + return isPhoneNumber(nativePtr,username); + } + @Override public void setUserData(Object obj) { userData = obj; diff --git a/linphone.iss.in b/linphone.iss.in index de88854d3..aa700200c 100644 --- a/linphone.iss.in +++ b/linphone.iss.in @@ -16,13 +16,21 @@ ShowLanguageDialog=yes UninstallDisplayIcon={app}\bin\linphone.exe [Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" -Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"; -Name: "french"; MessagesFile: "compiler:Languages\French.isl" -Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" -Name: "german"; MessagesFile: "compiler:Languages\German.isl" -Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" - +Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" +Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl"; +Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" +Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" +Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" +Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" +Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked diff --git a/mediastreamer2 b/mediastreamer2 index 524b87f7f..ebf5adcbb 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 524b87f7f6b4e87f0676dba1ca9e3e71dae77482 +Subproject commit ebf5adcbb3a9e48ef5d71635cdfc62ecddba10d4 diff --git a/oRTP b/oRTP index f21b5418b..15476b915 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit f21b5418b62c8acbe7a8a3be4ddf569af537d35e +Subproject commit 15476b915d35e91f3bad92b5e7d1bc4073c50603 diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt index aaf7d011f..301a6a442 100644 --- a/pixmaps/CMakeLists.txt +++ b/pixmaps/CMakeLists.txt @@ -42,6 +42,7 @@ set(PIXMAPS hold_on.png linphone-banner.png linphone.icns + linphone.png mic_active.png mic_muted.png notok.png diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt index 7c39caac6..52f36bb40 100644 --- a/po/CMakeLists.txt +++ b/po/CMakeLists.txt @@ -21,8 +21,7 @@ ############################################################################ if(GETTEXT_FOUND) - string(REPLACE " " ";" LANGUAGES ${LINPHONE_ALL_LANGS}) - foreach(language ${LANGUAGES}) + foreach(language ${LINPHONE_ALL_LANGS_LIST}) GETTEXT_PROCESS_PO_FILES(${language} ALL PO_FILES ${language}.po) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${language}.gmo DESTINATION ${PACKAGE_LOCALE_DIR}/${language}/LC_MESSAGES diff --git a/po/ar.po b/po/ar.po index 93272a4a9..d5b7711d4 100644 --- a/po/ar.po +++ b/po/ar.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-30 15:42+0000\n" -"Last-Translator: محيي الدين \n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" +"Last-Translator: Belledonne Communications \n" "Language-Team: Arabic (http://www.transifex.com/projects/p/linphone-gtk/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -97,122 +97,126 @@ msgstr "أنا" msgid "Couldn't find pixmap file: %s" msgstr "أيقونة غير موجودة : %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "أظهِرْ بعض معلومات التنقيح خلال التشغيل." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "الدليل إلى الملف الذي سيُكتَب فيه سجل الوقائع." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "ابدأ لِنْفُونْ لكن دون تفعيل الفيديو." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "شغِّله مُصغَّرا، ولا تُظهِر الواجهة الرئيسية." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "العنوان المُراد الاتصال به الآن" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "ملف التهيئة" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "ابدأ مرشد الصوت" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "شغِّل الاختبار الذاتي ثم اخرِجْ 0 إذا نجح" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" "Would you allow him to see your presence status or add him to your contact list ?\n" "If you answer no, this person will be temporarily blacklisted." -msgstr "%s يريد إضافتك إلى جهة اتصاله.\nهل تريد السماح له برؤية معلومات حضورك وكذا إضافته إلى جهة اتصالك أيضا ؟ إذا أجبت ب لا، سيُحظَر هذا الشخص مؤقتا." +msgstr "%s يريد إضافتك إلى جهة اتصاله.\nهل تريد السماح له برؤية معلومات حضورك وكذا إضافته إلى جهة اتصالك أيضا ؟ إذا أجبت بلا، سيُحظَر هذا الشخص مؤقتا." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "ادخل كلمة السر ل %s\n في نطاق %s:" +msgstr "ادخل كلمة السر لـ %s\n في نطاق %s:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "خطأ في المكالمة" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "إنتهت المكالمة" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "مكالمة واردة" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "أجِبْ" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "ارفضْ" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "المكالمة متوقفة" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "بواسطة %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "يود %s تشغيل الفيديو. هل تقبل ذلك ؟" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "وصلة إلى الموقع وِبْ" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "لِنْفُونْ - الهاتف المرئي عبر الإنترنت" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "لِنْفُونْ" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (افتراضي)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "التحويل إلى %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "لا وجود للوحة الصوت على هذا الحاسوب.\nلن تتمكن من تلقي أو إجراء أي مكالمة." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "هاتف SIP المرئي الحر" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "أهلا\n" @@ -225,9 +229,9 @@ msgstr "أضف إلى دفتر العناوين" msgid "Presence status" msgstr "معلومة الحضور" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" -msgstr "الإسم" +msgstr "الاسم" #: ../gtk/friendlist.c:721 msgid "Call" @@ -266,124 +270,124 @@ msgstr "احذف تاريخ دردشات '%s'" msgid "Add new contact from %s directory" msgstr "اضف جهة اتصال انطلاقا من الدليل %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "التردد (هرتز)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "الحالة" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "صبيب IP (ك.بِتْ/ثانية)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "الإعدادات" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "مفعَّل" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "غير مفعَّل" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "الحساب" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "الإنجليزية" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "الفرنسية" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "السويدية" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "الإيطالية" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "الإسبانية" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "البرتغالية البرازيلية" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "البولونية" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "الألمانية" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "الروسية" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "اليابانية" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "الهولندية" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "الهنغارية" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "التشيكية" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "الصينية المبسَّطة" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "الصينية التقليدية" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "النرويجية" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "العبرية" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "الصربية" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "يجب إعادة تشغيل لِنْفُونْ لكي تٌفعَّل اللغة المختارة." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "بدون" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -400,7 +404,7 @@ msgstr "أنت تستخدم الإصدار الأحدث." #: ../gtk/buddylookup.c:85 msgid "Firstname, Lastname" -msgstr "الإسم، اللقب" +msgstr "الاسم، اللقب" #: ../gtk/buddylookup.c:160 msgid "Error communicating with server." @@ -429,133 +433,133 @@ msgstr[3] "عُثِر على %i جهات اتصال" msgstr[4] "عُثِر على %i جهة اتصال" msgstr[5] "عُثِر على %i جهة اتصال" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "مرحبا !\nسيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "إنشاء حساب في linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "أتوفر مسبقا على حساب في linphone.org وأريد فقط استخدامه" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "أتوفر مسبقا على حساب sip وأريد فقط استخدامه" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "أريد تحديد عنوان التهيئة عن بعد" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" -msgstr "أدخِلْ إسم المستخدم في linphone.org" +msgstr "أدخِل اسم المستخدم في linphone.org" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" -msgstr "إسم المستخدم :" +msgstr "اسم المستخدم :" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "كلمة السر :" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "أدخل معلومات حسابك" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" -msgstr "إسم المستخدم*" +msgstr "اسم المستخدم*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "كلمة السر*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "النطاق*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "الوكيل" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) حقول ضرورية" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" -msgstr "إسم المستخدم* : (*)" +msgstr "اسم المستخدم* : (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "كلمة السر* : (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "البريد الالكتروني : (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "أكِّد كلمة السر : (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "أحطني علما بتحديثات لِنْفُونْ" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." -msgstr "خطأ، لم يتم تأكيد الحساب، إسم المستخدم سبق استخدامه أو تعذر الوصول للخادم.\nيُرجى إعادة المحاولة لاحقا." +msgstr "خطأ، لم يتم تأكيد الحساب، سبق استخدام اسم المستخدم أو تعذر الوصول للخادم.\nيُرجى إعادة المحاولة لاحقا." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "شكرا لك، لقد جرت تهيئة حسابك وهو الآن قابل للاستخدام." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "يُرجى تأكيد حسابك وذلك بالضغط على الوصلة التي أرسلناها لك بالبريد الإلكتروني.\nثم ارجع إلى هنا واضغط على زر التالي." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "مرشد تهيئة حساب SIP" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "مرحبا بك في مرشد إعداد الحساب" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "مرشد تهيئة الحساب" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "تهيئة حسابك (المرحلة 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" -msgstr "أدخل إسم المستخدم SIP لديك (المرحلة 1/1)" +msgstr "أدخل اسم المستخدم SIP (المرحلة 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "أدخل معلومات حسابك (المرحلة 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "تأكيد (المرحلة 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "خطأ" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "في طور الإنهاء" @@ -861,7 +865,7 @@ msgstr "سَجِّل واقرأ " #: ../gtk/main.ui.h:1 msgid "Callee name" -msgstr "إسم المنادَى" +msgstr "اسم المنادَى" #: ../gtk/main.ui.h:2 msgid "Send" @@ -937,11 +941,11 @@ msgstr "شغِّل الفيديو دائما" #: ../gtk/main.ui.h:26 msgid "Enable self-view" -msgstr "تفعيل رؤية نفسي" +msgstr "فعِّل رؤية نفسي" #: ../gtk/main.ui.h:27 msgid "_Help" -msgstr "_مساعدة" +msgstr "ال_مساعدة" #: ../gtk/main.ui.h:28 msgid "Show debug window" @@ -993,7 +997,7 @@ msgstr "هويتي الحالية :" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 msgid "Username" -msgstr "إسم المستخدم" +msgstr "اسم المستخدم" #: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8 msgid "Password" @@ -1029,7 +1033,7 @@ msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "الهاتف المرئي للإنترنت الموافق للبروتوكول المعياري SIP (rfc3261)." +msgstr "الهاتف المرئي للإنترنت الموافق للبروتوكول المعياري SIP (rfc3261)‎." #: ../gtk/about.ui.h:5 msgid "" @@ -1192,307 +1196,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "الإعدادات" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "حدِّد Maximum Transmission Unit :" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "أرسِل الأرقام الهاتفية على هيئة SIP INFO" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "السماح باستخدام IPv6" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "النقل" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "منفذ SIP/UDP" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "عشوائي" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "منفذ SIP/TCP" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "صوت RTP/UDP :" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "ثابت" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "فيديو RTP/UDP :" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "نوع وسيط التعمية" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "وسيط التعمية إجباري" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "النفق" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "حقول DSCP" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "بروتوكول الشبكة والمنافذ" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "الاتصال مباشر بالإنترنت" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "وراء جدار ناري (حدِّد عنوان IP البوابة)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "وراء جدار ناري (استخدم STUN)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "وراء جدار ناري (استخدم ICE)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "وراء جدار ناري (استخدم uPnP)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "عنوان IP العمومي :" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "خادم STUN :" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "إعدادات حول الجدار الناري" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "إعدادات الشبكة" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "صوت الجرس :" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "عتاد ALSA الخصوصي (اختياري) :" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "جهاز الالتقاط :" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "جهاز الرنين :" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "جهاز السمع :" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "فعِّل إزالة الصدى" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "الصوت" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "جهاز إدخال الفيديو :" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "المقدار المُراد لدقة الفيديو :" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "طريقة إخراج الفيديو :" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "اظهر معاينة الكاميرا" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "الفيديو" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "إعدادات الوسائط المتعددة" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "هذه الفقرة تحدد عنوانك SIP إن كنت لا تستخدم حساب SIP" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" -msgstr "إسمك المعروض (مثلا : زيد عمرو) :" +msgstr "اسمك المعروض (مثلا : زيد عمرو) :" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" -msgstr "إسم المستخدم لديك :" +msgstr "اسم المستخدم :" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "عنوانك SIP :" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "الهوية الافتراضية" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "المرشد" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "إضافة" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "حرر" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "أزل" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "حسابات الوكيل" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "احذف جميع كلمات السر" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "الأمان" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "الإجابة تلقائيا فور تلقي المكالمة" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "التأخير قبل الإجابة (ميلي ث,)" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "الإجابة تلقائيا" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "إدارة حسابات SIP" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "فعِّل" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "إلغاء التفعيل" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "المراميز" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "حدِّد 0 لعدم وضع أي حد" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "حد سرعة الرفع بالكيلوبِتْ/الثانية :" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "حد سرعة التنزيل بالكيلوبِتْ/الثانية :" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "فعِّل التحكم المتكيف مع الصبيب" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة قناة الاتصال المتاحة خلال المكالمة." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "إدارة سعة القناة" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "المراميز" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "اللغة" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "أظهر الإعدادات المتقدمة" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "المستوى" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "واجهة المستخدم" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "عنوان الخادم :" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "طريقة التحقق من الهوية :" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "تهيئة LDAP" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "أغلق" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "البحث عن جهات الاتصال في الدليل" @@ -1505,10 +1513,6 @@ msgstr "الإضافة إلى قائمتي" msgid "Search somebody" msgstr "البحث عن شخص" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "لِنْفُونْ" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "يُرجى الانتظار" @@ -1623,7 +1627,7 @@ msgstr "ربط DN" #: ../gtk/ldap.ui.h:10 msgid "Authname" -msgstr "إسم الهوية" +msgstr "اسم الهوية" #: ../gtk/ldap.ui.h:11 msgid "Realm" @@ -1640,11 +1644,11 @@ msgstr "الكائن الأساسي :" #: ../gtk/ldap.ui.h:15 #, no-c-format msgid "Filter (%s for name):" -msgstr "رشِّح (%s كإسم) :" +msgstr "رشِّح (%s كاسم) :" #: ../gtk/ldap.ui.h:16 msgid "Name Attribute:" -msgstr "خاصية الإسم :" +msgstr "خاصية الاسم :" #: ../gtk/ldap.ui.h:17 msgid "SIP address attribute:" @@ -1708,68 +1712,68 @@ msgstr "تجري التهيئة..." msgid "Please wait while fetching configuration from server..." msgstr "رجاءً انتظر ريثما ينتهي من جلب الإعدادات من الخادم..." -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "جاهز" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "تجري التهيئة" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "يجري البحث عن وجهة رقم الهاتف..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "لم يتمكن من إيجاد هذا الرقم." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "يتصل ب" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "لم يتمكن من الاتصال" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "آسف، وصل عدد المكالمات الآنية إلى حده الأقصى" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "يتصل بك" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "ويطلب ردا تلقائيا." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "يجري تعديل إعدادات المكالمة..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "متصل." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "أُلغيت المكالمة" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "لم يتمكن من توقيف المكالمة مؤقتا" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "وضع المكالمة قيد الانتظار..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "يجري بحث STUN..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "يجري جلب مرشَّحي ICE المحلين..." @@ -1807,7 +1811,7 @@ msgstr "ذهبتُ" #: ../coreapi/friend.c:57 msgid "Using another messaging service" -msgstr "استخدام خدمة أخرى للتراسل الفوري" +msgstr "أستخدم خدمة أخرى للتراسل الفوري" #: ../coreapi/friend.c:60 msgid "Offline" @@ -1829,13 +1833,13 @@ msgstr "حالة مجهولة" msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." -msgstr "عنوان SIP الذي أدخلت غير صالح، يجب أن يبدأ ب \"sip:\" متبوعا بإسم النطاق." +msgstr "إن عنوان SIP الذي أدخلت غير صحيح، يجب أن يبدأ بـ \"sip:‎\" متبوعا باسم المضيف." #: ../coreapi/proxy.c:334 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "هوية SIP التي أدخلت غير صحيحة.\nيجب أن تشبه هذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" +msgstr "إن هوية SIP التي أدخلت غير صحيحة.\nيجب أن تكون بهذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" #: ../coreapi/proxy.c:1416 #, c-format @@ -1854,100 +1858,100 @@ msgstr "يرن الجرس عن بعد..." msgid "Early media." msgstr "أخذ المكالمة مبكرا." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "المكاملة مع %s متوقفة." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "يجيب %s عن المكالمة - في وضع الانتظار." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "استُعيدت المكالمة." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "أجاب عن المكالمة %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "غير موائم، تحقق من المراميز أو إعدادات الأمان..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "إعدادات الوسائط غير موائمة." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "استُأنِفت المكالمة." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "وُقِّفت المكالمة مؤقتا من طرف آخر." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "حُدِّث الاتصال من البعيد." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "أُنهيت المكالمة." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "المستخدم مشغول." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "المستخدم غير متاح مؤقتا." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "لا يريد المستخدم أي إزعاج." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "تم تجاهل المكالمة." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "انتهت مهلة الطلب." -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "مُوجَّه" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "فشل الاتصال." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "تم التسجيل في %s بنجاح." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "أُلغي التسجيل في %s ." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "لا إجابة قبل انتهاء المهلة" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "فَشِل التسجيل في %s: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "خدمة غير متاحة، تجري الإعادة" @@ -1957,11 +1961,11 @@ msgstr "خدمة غير متاحة، تجري الإعادة" msgid "Authentication token is %s" msgstr "شارة التحقق من الهوية هي %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "عُدِّلت معاملات المكالمات بنجاج." -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/cs.po b/po/cs.po index 05e682390..cdb192696 100644 --- a/po/cs.po +++ b/po/cs.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Czech (http://www.transifex.com/projects/p/linphone-gtk/language/cs/)\n" "MIME-Version: 1.0\n" @@ -91,45 +91,45 @@ msgstr "Já" msgid "Couldn't find pixmap file: %s" msgstr "Nelze najít soubor s obrázkem: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "Za běhu vypisuje některé ladicí informace na standardní výstup." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "Soubor, kam zapisovat protokol." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Spustí linphone se zakázaným obrazem." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Spustí se pouze do systémové oblasti, nezobrazí hlavní okno." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "Zavolá právě teď na tuto adresu" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Zadejte pracovní adresář (měl by být základní instalační adresář, například c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -137,76 +137,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s si vás chce přidat do svého adresáře.\nDovolíte mu, aby viděl váš stav přítomnosti, nebo si ho také chcete přidat do svého adresáře?\nOdpovíte-li ne, tato osobo bude dočasně blokována." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Chyba hovoru" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Hovor ukončen" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Odpovědět" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Odmítnout" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Hovor odložen" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "kým: %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s navrhuje začít videohovor. Přijímáte?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Odkaz na webovou stránku" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Lipnhone – internetový videofon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Výchozí)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Byly jsme přepojeni na %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Na tomto počítači nebyla objevena žádná zvuková karta.\nNebudete moci vytáčet a přijímat a zvukové hovory." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Volný SIP videofon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -219,7 +223,7 @@ msgstr "Přidat do adresáře" msgid "Presence status" msgstr "Stav" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Jméno" @@ -260,124 +264,124 @@ msgstr "Odstranit historii diskuze u kontaktu „%s“" msgid "Add new contact from %s directory" msgstr "Přidat nový kontakt z adresáře %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Kmitočet (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Stav" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parametry" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Povoleno" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Zakázáno" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Účet" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "angličtina" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "francouzština" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "švédština" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "italština" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "španělština" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "brazilská portugalština" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "polština" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "němčina" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "ruština" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "japonština" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "dánština" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "maďarština" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "čínština" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "tradiční čínština" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "norština" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "hebrejština" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "srbština" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Aby se projevil výběr nového jazyka, je nutné znovu spustit linphone." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Žádné" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -420,133 +424,133 @@ msgstr[0] "Nalezen %i kontakt" msgstr[1] "Nalezeny %i kontakty" msgstr[2] "Nalezeno %i kontaktů" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Vytvořit účet na linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Účet na linphone.org již mám a chci jej použít" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "SIP účet již mám a chci jej použít" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Zadejte uživatelské jméno na linphone.org" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Uživatelské jméno:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Heslo:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Zadejte údaje o vašem účtu" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Uživatelské jméno*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Heslo*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Doména*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Povinné položky" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Uživatelské jméno: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Heslo: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "E-mail: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Potvrďte heslo: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Došlo k chybě (účet nebyl ověřen, uživatelské jméno již existuje nebo server není dostupný).\nProsím, vraťte se a zkoste to znovu." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Děkujeme vám. Váš účet je nyní nastaven a připraven k použití." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Prosím, ověřte svůj účet tak, že kliknete na odkaz, který jsme vám právě zaslali e-mailem.\nPak se sem vraťte a stiskněte tlačítko Další." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Vítejte v průvodci nastavení účtu" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Průvodce nastavením účtu" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Nastavit účet (krok 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Zadejte vaše sipové uživatelské jméno (krok 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Zadejte údaje o účtu (krok 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Ověření (krok 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Chyba" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Ukončuje se" @@ -1183,307 +1187,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Nastavení" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Nastavit MTU (největší přenositelná zpráva):" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Odesílat tóny DTMF jako SIP INFO zprávy" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Přenos" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Zvukový RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Stálý" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Obrazový RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Druh šifrování médií" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Šifrování médií je povinné" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Tunel" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "Položky DSCP" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Síťové protokoly a porty" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Přímé připojení do Internetu" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Za NAT/firewallem (adresu určí STUN)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "Za NAT/firewallem (adresu určí ICE)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "Za NAT/firewallem (adresu určí UPnP)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Veřejná IP adresa:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN server:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT a firewall" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Nastavení sítě" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Vyzvánění:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Zvláštní ALSA zařízení (volitelné):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Zařízení pro nahrávání:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Zařízení pro vyzvánění:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Zařízení pro přehrávání:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Zapnout potlačení ozvěny" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Zvuk" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Vstupní zařízení obrazu:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Upřednostňované rozlišení obrazu:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Obraz" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Nastavení multimédií" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Tento oddíl určuje vaši SIP adresu, když se nepoužívá žádný účet" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Vaše zobrazované jméno (např. Jan Novák):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Vaše uživatelské jméno:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Vaše výsledná SIP adresa:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Implicitní totožnost" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Průvodce" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Přidat" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Upravit" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Odstranit" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Proxy účty" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Vymazat všechna hesla" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Soukromí" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Nastavení SIP účtů" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Povolit" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Zakázat" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Kodeky" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 znamená „neomezeno“" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Omezení odchozí rychlosti (kb/s):" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Omezení příchozí rychlosti (kb/s):" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Zapnout přizpůsobující se řízení rychlosti" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Přizpůsobující se řízení rychlosti je technika dynamického odhadu dostupného pásma během hovoru." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Využití šířky pásma" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Kodeky" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Jazyk" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Zobrazit podrobnější nastavení" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Úroveň" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Uživatelské rozhraní" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Hotovo" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Hledat kontakty v adresáři" @@ -1496,10 +1504,6 @@ msgstr "Přidat na svůj seznam" msgid "Search somebody" msgstr "Hledat někoho" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Prosím, čekejte" @@ -1699,68 +1703,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Připraven." -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Vyhledává se umístění čísla…" -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Toto číslo nelze vyhledat." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Navazuje se spojení" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Nelze volat" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Je nám líto, ale byl dosažen maximální počet současných hovorů." -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "vás volá" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " a požaduje automatickou zvednutí." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Upravují se parametry hovoru…" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Připojeno." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Hovor přerušen" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Hovor nebylo možné odložit" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Současný hovor se odkládá…" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Hledá se adresa pomocí STUN…" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "Shromažďují se místní kandidáti ICE…" @@ -1845,100 +1849,100 @@ msgstr "Vyzvání na druhé straně…" msgid "Early media." msgstr "Časná média." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "Hovor s %s je odložen." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Hovor přijat kým: %s – odložen." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Hovor obnoven." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "Hovor přijat kým: %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Není slučitelné. Zkontrolujte nastavení kodeků a zabezpečení…" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Neslučitelné parametry médií." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Byli jsme obnoveni." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "Byli jsme odloženi protistranou." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "Hovor byl aktualizován protistranou." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Hovor ukončen." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Uživatel je zaneprázdněn." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Uživatel je dočasně nedostupný." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Uživatel si nepřeje být rušen." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Volání odmítnuto." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Přesměrováno" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Volání se nezdařilo." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registrace na %s byla úspěšná." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Odregistrování z %s hotovo." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "odpověď nedorazila včas" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrace na %s selhala: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1948,11 +1952,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "Klíč k ověření totožnosti je %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/de.po b/po/de.po index 1d5b4011b..6a6e30e83 100644 --- a/po/de.po +++ b/po/de.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: German (http://www.transifex.com/projects/p/linphone-gtk/language/de/)\n" "MIME-Version: 1.0\n" @@ -91,45 +91,45 @@ msgstr "Eigenes Telefon" msgid "Couldn't find pixmap file: %s" msgstr "Pixmapdatei %s kann nicht gefunden werden." -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "Ausgabe von Debug-Informationen auf stdout während der Laufzeit" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "Pfad zu einer Datei, in die Protokolle geschrieben werden." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Linphone mit ausgeschaltetem Video starten." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Nur im Systemabschnitt der Kontrollleiste starten, aber das Hauptfenster nicht zeigen." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "Im Moment anzurufende Adresse" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Geben Sie einen Arbeitsordner an (sollte der Installationsordner sein, z. B. C:\\Programme\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Konfigurationsdatei" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Starte den Audio-Assistent" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -137,76 +137,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s möchte Sie zu seiner Kontaktliste hinzufügen.\nMöchten Sie ihm erlauben, Ihren Anwesenheitsstatus zu sehen, oder ihn zu Ihrer Kontaktliste hinzufügen?\nWenn Sie mit Nein antworten, wird diese Person vorläufig blockiert." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Bitte geben Sie Ihr Passwort für den Benutzernamen %s\n für Bereich %s ein:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Anruf fehlgeschlagen" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Anruf beendet" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Annehmen" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Abweisen" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Anruf wird gehalten" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "von %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s schlägt vor, eine Videoübertragung zu starten. Nehmen Sie an?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Website-Verknüpfung" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - ein Internet-Video-Telefon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Vorgabe)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Vermittlung nach %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Auf diesem Rechner können keine Soundkarten gefunden werden.\nSie können keine Audio-Anrufe tätigen oder entgegennehmen." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Ein freies SIP-Video-Telefon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -219,7 +223,7 @@ msgstr "Zum Adressbuch hinzufügen" msgid "Presence status" msgstr "Anwesenheitsstatus" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Name" @@ -260,124 +264,124 @@ msgstr "Lösche Gesprächshistorie von '%s'" msgid "Add new contact from %s directory" msgstr "Einen neuen Kontakt aus dem %s-Verzeichnis hinzufügen" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Rate (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "IP Bit-Rate (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parameter" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Freigegeben" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Gesperrt" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Englisch" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Französisch" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Schwedisch" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italienisch" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Spanisch" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Brasilianisches Portugiesisch" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polnisch" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japanisch" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Niederländisch" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Ungarisch" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Tschechisch" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Chinesisch" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Norwegisch" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "Hebräisch" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Serbisch" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Linphone muss neu gestartet werden, damit die neue Spracheinstellung wirksam wird." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Keinen" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -419,133 +423,133 @@ msgid_plural "Found %i contacts" msgstr[0] "%i Kontakt gefunden" msgstr[1] "%i Kontakte gefunden" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Willkommen!\nDieser Assistent hilft Ihnen dabei ein SIP-Konto einzurichten." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Ein Konto bei linphone.org erstellen." -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Ich habe bereits ein Konto bei linphone.org und möchte es jetzt benutzen." -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "Ich habe bereits ein SIP-Konto und möchte es jetzt benutzen." -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "Ich möchte eine URI zur Fernkonfiguration angeben" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Geben Sie Ihren Benutzernamen bei linphone.org ein." -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Benutzername:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Passwort:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Geben Sie Ihre Zugangsdaten ein." -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Benutzername*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Passwort*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Domäne*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) erforderliche Felder" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Benutzername: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Passwort: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "E-Mail: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Bestätigen Sie Ihr Passwort: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "Halte mich über linphone Aktualisierungen auf dem laufenden" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Fehler, Konto kann nicht bestätigt werden. Der Benutzername wird bereits\nverwendet oder der Server ist unerreichbar.\nBitte gehen Sie zurück und versuchen Sie es noch einmal." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Danke. Ihr Konto ist nun fertig eingerichtet und kann verwendet werden." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Bitte bestätigen Sie Ihr Konto, indem Sie auf die Verknüpfung klicken, die wir Ihnen soeben per E-Mail geschickt haben.\nDanach gehen Sie hierher zurück und drücken auf „Vor“." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "SIP-Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Willkommen zum Konto-Einrichtungsassistenten" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Konto einrichten (Schritt 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Geben Sie Ihren SIP-Benutzernamen ein (Schritt 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Geben Sie Ihre Zugangsdaten ein (Schritt 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Bestätigung (Schritt 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Fehler" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Fertigstellen" @@ -1182,307 +1186,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Einstellungen" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Maximum Transmission Unit setzen:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "DTMFs als SIP-Info senden" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Übertragung" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "SIP/UDP Port" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "SIP/TCP Port" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Audio RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Fest" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Video RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Verschlüsselungstyp der Medien" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Medienverschlüsselung erzwingen" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Tunnel" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "DSCP-Felder" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Netzwerkprotokoll und Ports" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Direkte Verbindung ins Internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "Hinter NAT / Firewall (Gateway IP angeben)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Hinter NAT / Firewall (STUN verwenden)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "Hinter NAT / Firewall (ICE verwenden)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "Hinter NAT / Firewall (uPnP verwenden)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Öffentliche IP-Adresse:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN-Server:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT und Firewall" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Netzwerkeinstellungen" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Klingelton:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Spezielles ALSA-Gerät (optional):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Aufnahmegerät:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Gerät für Klingelton:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Wiedergabegerät:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Echounterdrückung ein" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Audio" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Video-Aufnahmegerät:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Bevorzugte Video-Auflösung:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Methode zur Videoausgabe" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Multimedia-Einstellungen" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "In diesem Bereich legen Sie Ihre SIP-Adresse fest, wenn Sie kein SIP-Konto verwenden." -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Ihr angezeigter Name (z. B. Heinz Müller):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Ihr Benutzername:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Sich ergebende SIP-Adresse:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Standard-Identität" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Assistent" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Hinzufügen" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Bearbeiten" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Entfernen" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Proxy-Konten" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Alle Passwörter löschen" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Privatsphäre" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "SIP-Konten verwalten" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Freigeben" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Sperren" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 bedeutet „unbegrenzt“" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Upload-Bandbreite (kbit/sec):" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Download-Bandbreite (kbit/sec):" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Adaptive Ratenregelung ein" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der zur Verfügung stehenden Bandbreite während eines Anrufs." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Bandbreiten-Einstellungen" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Sprache" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Fortgeschrittene Einstellungen anzeigen" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Detaillierung" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Benutzeroberfläche" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "Server-Adresse" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "Authentifizierungsmethode" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "LDAP-Kontoeinrichtung" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Fertig" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Kontakte im Verzeichnis suchen" @@ -1495,10 +1503,6 @@ msgstr "Zur Kontaktliste hinzufügen" msgid "Search somebody" msgstr "Kontaktsuche" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Bitte warten" @@ -1698,68 +1702,68 @@ msgstr "Einstellen..." msgid "Please wait while fetching configuration from server..." msgstr "Bitte warten Sie während die Einstellungen vom Server abgerufen werden..." -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Bereit" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "Einstellen" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Telefonnummernziel wird gesucht..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Diese Nummer kann nicht aufgelöst werden." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Verbindungsaufbau" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Anruf kann nicht getätigt werden." -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht." -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "ruft Sie an" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " und fragt nach automatischer Antwort." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Die Anrufparameter werden verändert..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Verbunden." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Anruf abgebrochen" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Anruf kann nicht gehalten werden" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Aktueller Anruf wird gehalten..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "STUN-Ermittlung läuft..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "Lokale Kandidaten für ICE werden zusammengestellt..." @@ -1844,100 +1848,100 @@ msgstr "Klingeln bei der Gegenseite..." msgid "Early media." msgstr "nicht kompatibel, prüfe Codecs oder Sicherheitseinstellungen..." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "Anruf mit %s wird gehalten." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Der von %s entgegengenommene Anruf wird gehalten." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Anruf fortgesetzt." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "Anruf wird von %s entgegengenommen." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Inkompatibel, prüfe Codecs oder Sicherheitseinstellungen..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Inkompatible Medienparameter." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Anruf wird fortgesetzt." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "Anruf wird von der Gegenseite gehalten." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "Anruf ist von der Gegenseite aktualisiert worden." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Anruf beendet." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Teilnehmer ist besetzt." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Teilnehmer zur Zeit nicht verfügbar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Teilnehmer möchte nicht gestört werden." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Anruf abgewiesen" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "Zeitüberschreitung bei der Anfrage" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Umgeleitet" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Anruf fehlgeschlagen." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registrierung auf %s erfolgreich." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Abmeldung von %s ist erfolgt." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "Zeitüberschreitung bei der Antwort" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrierung auf %s fehlgeschlagen: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "Service nicht verfügbar, versuche erneut" @@ -1947,11 +1951,11 @@ msgstr "Service nicht verfügbar, versuche erneut" msgid "Authentication token is %s" msgstr "Authentifizierungs-Token ist %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/es.po b/po/es.po index 3422f3896..54548cf24 100644 --- a/po/es.po +++ b/po/es.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Spanish (http://www.transifex.com/projects/p/linphone-gtk/language/es/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "Yo" msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar el archivo pixmap: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "registra a stdout cierta información de depuración durante la ejecución." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "ruta a un fichero donde escribir logs." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Iniciar sólo en la barra de tareas, no mostrar la interfaz principal." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "dirección a la que llamar inmediatamente" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Especifique un directorio de trabajo (debería ser la raíz de la instalación, ej: c:\\Archivos de Programa\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s desea añadirle a su lista de contactos.\n¿Desea permitirle ver su estado de presencia o añadirle a su lista de contactos?\nSi responde no, esta persona será bloqueada temporalmente." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Llamada entrante" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Contestar" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Enlace a la Web" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - un video-teléfono a través de Internet" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Opción predeterminada)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Somos transferidos a %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "No se ha encontrado una tarjeta de sonido en este equipo.\nNo será posible realizar o recibir llamadas de audio." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Un video-teléfono SIP gratuito" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "" msgid "Presence status" msgstr "" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nombre" @@ -256,124 +260,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "Añadir nuevo contacto desde el directorio %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Frecuencia (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Estado" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parámetros" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Activado" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Desactivado" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Cuenta" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Inglés" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Francés" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Sueco" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Portugués de Brasil" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polaco" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Alemán" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Ruso" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japonés" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Holandés" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Húngaro" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Checo" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Chino" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Chino Tradicional" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Noruego" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Deberá reiniciar linphone para aplicar la nueva selección de lenguaje" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -415,133 +419,133 @@ msgid_plural "Found %i contacts" msgstr[0] "Se encontró %i contacto" msgstr[1] "Se encontraron %i contactos" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Gracias. Su cuenta está configurada y lista para su utilización." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Bienvenido al asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1178,307 +1182,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Configuración" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Fijar Unidad de Transmisión Máxima:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Enviar DTMFs como información SIP" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Audio RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Vídeo RTP/UDP" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Tipo de cifrado de medios" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Protocolo de red y puertos" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Conexión directa a Internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Tras un NAT/Firewall (utilizar STUN para resolver)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Dispositivo especial ALSA (opcional):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Activar cancelación de eco" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Resolución de vídeo preferida:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Configuración multimedia" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Esta sección define su dirección SIP cuando no utiliza una cuenta SIP" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Su nombre a mostrar (x ej: Pepito Pérez):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Añadir" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Editar" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Eliminar" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Borrar todas las contraseñas" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Gestionar cuentas SIP" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Activar" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Desactivar" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 significa \"ilimitado\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Velocidad límite de subida en Kbit/seg" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Velocidad límite de descarga en Kbit/seg:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Activar control de frecuencia adaptativo" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Control de frecuencia adaptativo es una técnica que estima dinámicamente el ancho de banda disponible durante la llamada." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Control de ancho de banda" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Mostrar opciones avanzadas" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1491,10 +1499,6 @@ msgstr "Añadir a mi lista" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Espere por favor" @@ -1694,68 +1698,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Buscando el número de teléfono del destinatario…" -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "No se ha podido resolver este número." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Disculpe, se ha alcanzado el máximo número de llamadas simultáneas" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "y ha solicitado auto respuesta." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Modificando parámetros de llamada…" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "No se pudo pausar la llamada" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Pausando la llamada actual..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Búsqueda STUN en proceso…" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1840,100 +1844,100 @@ msgstr "" msgid "Early media." msgstr "Medios iniciales." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "La llamada con %s está puesta en pausa." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Llamada respondida por %s - en espera." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "El usuario está ocupado." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "El usuario no está disponible temporalmente." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "El usuario no quiere que le molesten." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Llamada rechazada." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Redigirida" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "timeout sin respuesta" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1943,11 +1947,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/fr.po b/po/fr.po index 72b945b5e..652612561 100644 --- a/po/fr.po +++ b/po/fr.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:51+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:35+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: French (http://www.transifex.com/projects/p/linphone-gtk/language/fr/)\n" "MIME-Version: 1.0\n" @@ -92,45 +92,45 @@ msgstr "Moi" msgid "Couldn't find pixmap file: %s" msgstr "Icone non trouvée: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "affiche des informations de debogage" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "chemin vers le fichier de logs." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Démarrer linphone avec la vidéo désactivée." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Démarre iconifié, sans interface principale." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "adresse à appeler maintenant" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Spécifie un répertoire de travail (qui devrait être le répertoire d'installation, par exemple c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Ficher de configuration" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Démarre l'assistant audio" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "Exécuter le test local et retourner 0 en cas de succès" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -138,76 +138,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s souhaite vous ajouter à sa liste de contact.\nSouhaitez vous l'autoriser à voir votre information de présence et l'ajouter à votre liste également ?\nSi vous répondez non, cette personne sera mise temporairement sur liste noire." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Entrez le mot de passe pour %s\n sur le domaine %s:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Erreur lors de l'appel" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Appel terminé." -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Répondre" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Refuser" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Appel en pause" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "b>par %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s propose de démarrer la vidéo. Acceptez-vous ?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Lien site web" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - un téléphone video pour l'internet" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "Appels vidéo via internet" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (par défaut)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Transfert vers %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Aucune carte son n'a été détectée sur cet ordinateur.\nVous ne pourrez pas effectuer d'appels audio." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Un visiophone libre" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "Bonjour\n" @@ -220,7 +224,7 @@ msgstr "Ajouter au carnet d'adresse" msgid "Presence status" msgstr "Info de présence" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nom" @@ -261,124 +265,124 @@ msgstr "Supprimer l'historique de chat de '%s'" msgid "Add new contact from %s directory" msgstr "Ajouter un contact depuis l'annuaire %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Fréquence (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Etat" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "Débit IP (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Paramètres" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Activé" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Désactivé" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Compte" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Anglais" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Suédois" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italien" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Espagnol" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Portugais brésilien" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polonais" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Allemand" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Russe" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Néérlandais" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Hongrois" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Tchèque" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Chinois traditionnel" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Norvégien" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "Hébreu" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Serbe" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "La nouvelle selection de langue prendra effet au prochain démarrage de linphone." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Aucun" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -420,133 +424,133 @@ msgid_plural "Found %i contacts" msgstr[0] "%i contact trouvé." msgstr[1] "%i contacts trouvés." -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Bienvenue !\nCet assistant va vous aider à utiliser un compte SIP pour vos appels." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Créer un compte sur linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "J'ai déjà un compte linphone.org et je souhaite l'utiliser" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "J'ai déjà un compte Sip et je souhaite l'utiliser" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "Je veux spécifier une URI de configuration" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Entrez votre identifiant linphone.org" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Nom d'utilisateur:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Mot de passe:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Entrez les informations concernant votre compte" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Nom d'utilisateur*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Mot de passe*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Domaine*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Champs requis" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Nom d'utilisateur: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Mot de passe: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "Email : (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Confirmez votre mot de passe: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "Me tenir informer des mises à jour de Linphone " -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Erreur, le compte n'est pas validé, l'identifiant est déjà utilisé ou le serveur n'est pas accessible.\nMerci d'essayer à nouveau." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Merci. Votre compte est maintenant configuré et prêt à être utilisé." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Merci de valider votre compte en cliquant sur le lien que nous avons envoyé par email.\nPuis appuyez sur suivant." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Bienvenue dans l'assistant de configuration de compte." -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Configurez votre compte (étape 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Entrez votre identifiant sip (étape 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Entrez les informations concernant votre compte (étape 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Validation (étape 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Erreur" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "En cours d’arrêt." @@ -980,7 +984,7 @@ msgstr "Appels récents" #: ../gtk/main.ui.h:40 msgid "My current identity:" -msgstr "Mon identité sip:" +msgstr "Mon identité SIP :" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7 msgid "Username" @@ -1088,7 +1092,7 @@ msgstr "Linphone - Configurer un compte SIP" #: ../gtk/sip_account.ui.h:2 msgid "Your SIP identity:" -msgstr "Votre identité SIP:" +msgstr "Votre identité SIP :" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1183,307 +1187,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Réglages" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Spécifier la Maximum Transmission Unit" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Envoyer les digits en tant que SIP INFO" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "Utiliser IPv6" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Transport" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "Port SIP / UDP" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "Aléatoire" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "Port SIP / TCP" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Audio RTP / UDP :" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Fixe" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Vidéo RTP / UDP :" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Type d'encryption media" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Le chiffrement media est obligatoire" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Tunnel" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "Champs DSCP" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Protocoles réseaux et ports" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Connexion directe à l'Internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "Derrière un pare-feu (spécifier la passerelle ci dessous)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Derrière un pare-feu (utiliser STUN)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "Derrière un pare-feu (utiliser ICE)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "Derrière un pare-feu (utiliser uPnP)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Adresse IP publique:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Serveur STUN:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "Paramètres liés au pare-feu" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Paramètres réseau" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Sonnerie:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Appareil ALSA spécifique (optionnel) :" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Périphérique de capture:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Périphérique de sonnerie:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Périphérique d'écoute:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Activer l'annulation d'écho" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Son" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Périphérique d'entrée vidéo" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Résolution de vidéo préférée:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Type de rendu video:" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "Afficher la vidéo" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Paramètres multimedia" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Cette rubrique permet de définir son adresse SIP lorsqu'on ne possède pas de compte SIP" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Votre nom d'affichage (ex: John Doe)" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Votre nom d'utilisateur:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Votre adresse SIP:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Identité par défaut" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Assistant" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Ajouter" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Editer" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Enlever" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Comptes SIP via des proxy" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Effacer tous les mots de passe" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Sécurité" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "Répondre automatiquement aux appels entrants" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "Temps d'attente avant réponse (ms)" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "Décrochage automatique" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Gérer mes comptes SIP" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Activer" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Désactiver" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "Indiquez 0 pour ne pas mettre de limite" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Limite de débit montant en kbits/sec:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Limite de débit descendant en kbits/sec:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Activer le control de débit adaptatif." -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Le control de débit adaptatif est une technique pour adapter la qualité de l'audio et de la video en fonction de la bande passante disponible, durant l'appel." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Gestion de la bande passante" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Langue" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Montrer les réglages avancés" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Niveau" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Interface utilisateur" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "Adresse du serveur:" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "Méthode d'authentification:" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "Configuration LDAP" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Fermer" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Rechercher dans l'annuaire" @@ -1496,10 +1504,6 @@ msgstr "Ajouter à ma liste" msgid "Search somebody" msgstr "Rechercher une personne" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "En attente" @@ -1699,68 +1703,68 @@ msgstr "Configuration en cours" msgid "Please wait while fetching configuration from server..." msgstr "Veuillez patenter un instant pendant le chargement de la configuration distante..." -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Prêt." -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "Configuration en cours" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Recherche de la destination du numéro de téléphone..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "La destination n'a pu être trouvée." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Appel de" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Echec de l'appel" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Désolé, le nombre maximum d'appels simultanés est atteint." -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "vous appelle" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "et sollicite un décrochage automatique." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Modifications des paramètres d'appels..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "En ligne." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Appel abandonné" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "La mise en attente a échoué" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Mise en attente de l'appel..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Découverte STUN en cours" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "Collection des candidats locaux ICE en cours..." @@ -1826,7 +1830,7 @@ msgstr "L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" su msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" -msgstr "L'identité SIP que vous avez fourni est invalide.\nElle doit être de la forme sip:username@domain, comme par example sip:alice@example.net" +msgstr "L'identité SIP que vous avez fourni est invalide.\nElle doit être de la forme sip:utilisateur@domaine, comme par exemple sip:alice@example.net" #: ../coreapi/proxy.c:1416 #, c-format @@ -1845,100 +1849,100 @@ msgstr "Sonnerie distante..." msgid "Early media." msgstr "Prise d'appel anticipée." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "%s est maintenant en attente." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Appel répondu par %s - en attente" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Appel repris." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "Appel répondu par %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Incompatible, vérfiez les codecs ou les paramètres de sécurité..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Paramètres media incompatibles." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Appel repris." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "L'appel a été mis en attente." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "L'appel est modifié par la partie distante." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Appel terminé." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Occupé..." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "L'usager est temporairement indisponible." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "L'usager ne souhaite pas être dérangé" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Appel décliné." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "Délai d'attente de la requête dépassé." -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Redirection" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "L'appel a échoué." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Enregistrement sur %s effectué." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Désenregistrement sur %s effectué." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "Pas de réponse" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Echec de l'enregistrement sur %s: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "Service indisponible, nouvelle tentative" @@ -1948,11 +1952,11 @@ msgstr "Service indisponible, nouvelle tentative" msgid "Authentication token is %s" msgstr "Le jeton d'authentification est %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "Les paramètres d'appel ont été modifiés avec succès." -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/he.po b/po/he.po index d0730fa4f..08c49042c 100644 --- a/po/he.po +++ b/po/he.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Hebrew (http://www.transifex.com/projects/p/linphone-gtk/language/he/)\n" "MIME-Version: 1.0\n" @@ -92,45 +92,45 @@ msgstr "אני" msgid "Couldn't find pixmap file: %s" msgstr "לא ניתן למצוא קובץ ‫pixmap: ‫%s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -138,76 +138,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "‫%s מעוניין להוסיפך אל רשימת אנשי הקשר שלו.\nהאם ברצונך להרשות להם לראות את מצב נוכחותך או להוסיפם אל רשימת אנשי הקשר שלך ?\nהיה ותשובתך תהיה לא, אדם זה יהיה מסומן באופן זמני ברשימה השחורה." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "אנא הזן סיסמה עבור משתמש %s\nבמתחם %s:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "שגיאת קריאה" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "שיחה הסתיימה" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "לענות" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "לדחות" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "שיחה הושהתה" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "על ידי %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "‏%s רוצה להתחיל וידאו. האם אתה מסכים ?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "קישור אתר רשת" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "‫Linphone - וידאופון אינטרנטי" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "‫%s (ברירת מחדל)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "אנחנו מועברים אל %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "לא אותרו כרטיסי קול במחשב זה.\nלא תהיה ביכולתך לשלוח או לקבל שיחות אודיו." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "וידאופון SIP חופשי" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -220,7 +224,7 @@ msgstr "הוסף אל ספר כתובות" msgid "Presence status" msgstr "מצב נוכחות" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "שם" @@ -261,124 +265,124 @@ msgstr "מחק היסטוריית שיחה של '%s'" msgid "Add new contact from %s directory" msgstr "הוסף איש קשר חדש מן מדור %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "שיעור (הרץ)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "מצב" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "פרמטרים" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "מופעל" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "לא מופעל" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "חשבון" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "português brasileiro" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Česky" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "繁體字" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "norsk" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "српски srpski" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "עליך לאתחל את לינפון כדי שהשפה החדשה תיכנס לתוקף." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "ללא" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -420,133 +424,133 @@ msgid_plural "Found %i contacts" msgstr[0] "נמצא איש קשר %i" msgstr[1] "נמצאו %i אנשי קשר" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "צור חשבון אצל linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "כבר קיים חשבון linphone.org ברשותי וברצוני לעשות בו שימוש" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "כבר קיים חשבון sip ברשותי וברצוני לעשות בו שימוש" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "הזן את שם משתמשך אצל linphone.org" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "שם משתמש:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "סיסמה:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "הזן את מידע חשבונך" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "שם משתמש*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "סיסמה*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "מתחם*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "פרוקסי" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) שדות חובה" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "שם משתמש: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "סיסמה: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "דוא״ל: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "אימות סיסמתך: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "שגיאה, חשבון לא אומת, שם משתמש כבר בשימוש או שרת לא ניתן להשגה.\nנא לחזור ולנסות שוב." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "תודה לך. חשבונך מוגדר ומוכן לשימוש כעת." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "נא לאמת את חשבונך באמצעות הקלקה על הקישור ששלחנו לך עתה באמצעות דוא״ל.\nאחרי כן נא לחזור לכאן וללחוץ על הלחצן 'קדימה'." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "ברוך בואך אל אשף הגדרת החשבון" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "אשף הגדרת חשבון" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "הגדרת חשבונך (צעד 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "הזנת שם משתמש sip (צעד 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "הזנת מידע חשבון (צעד 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "אימות (צעד 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "שגיאה" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "מסיים כעת" @@ -1183,307 +1187,311 @@ msgid "C" msgstr "" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "‏SIP ‏(UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "‏SIP ‏(TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "‏SIP ‏(TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "הגדרות" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "הגדר יחידת תמסורת מרבית:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "שלח טזמ״תים (DTMFs) כמידע SIP" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "טרנספורט" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "אודיו RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "מקובע" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "וידאו RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "סוג הצפנת מדיה" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "הצפנת מדיה הינה מנדטורית" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "מינהור" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "שדות DSCP" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "פרוטוקולי רשת תקשורת ופורטים" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "חיבור ישיר אל האינטרנט" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "מאחורי NAT / חומת אש (בעזרת STUN לפתירה)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "מאחורי NAT / חומת אש (בעזרת ICE)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "מאחורי NAT / חומת אש (בעזרת uPnP)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "כתובת IP פומבית:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "שרת STUN:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "‫NAT וחומת אש" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "הגדרות רשת תקשורת" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "צליל צלצול:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "התקן ALSA מיוחד (רשות):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "התקן לכידה:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "התקן צלצול:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "התקן פס קול:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "אפשר ביטול הד" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "אודיו" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "התקן קלט וידאו:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "רזולוציית וידאו מועדפת:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "וידאו" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "הגדרות מולטימדיה" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "חלק זה מגדיר את כתובת ה־SIP כאשר אינך עושה שימוש בחשבון SIP" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "שם התצוגה שלך (למשל: יורם יהודה):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "שם המשתמש שלך:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "כתובת SIP נובעת:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "זהות משתמטת" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "אשף" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "הוסף" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "ערוך" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "הסר" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "חשבונות Proxy" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "מחק סיסמאות" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "פרטיות" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "ניהול חשבונות ‫SIP" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "אפשר" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "נטרל" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "קודקים" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 מסמל \"בלי הגבלה\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "מגבלת מהירות העלאה בקי״ב/שנ׳:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "מגבלת מהירות הורדה בקי״ב/שנ׳:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "אפשר בקרת קצב מסתגלת" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "בקרת רוחב פס" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "קודקים" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "שפה" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "הצג הגדרות מתקדמות" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "רמה" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "ממשק משתמש" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "סיום" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "‏SIP ‏(UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "‏SIP ‏(TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "‏SIP ‏(TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "חיפוש אנשי קשר בתוך מדור" @@ -1496,10 +1504,6 @@ msgstr "הוסף אל הרשימה שלי" msgid "Search somebody" msgstr "חיפוש אחר מישהו" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "נא להמתין" @@ -1699,68 +1703,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "מוכן" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "מחפש כעת עבור יעד מספר טלפון..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "לא ניתן לפתור את מספר זה." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "מתקשר כעת" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "לא ניתן להתקשר" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "מתקשר/ת אליך" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " ומבקש/ת מענה אוטומטי." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "מתאים כעת פרמטרים של שיחה..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "מקושר." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "קריאה בוטלה" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "לא ניתן להשהות את השיחה" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "משהה כעת שיחה נוכחית..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "בדיקת STUN מצויה כעת בעיצומה..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "צבירת מועמדים מקומיים של ICE מצויה כעת בעיצומה..." @@ -1845,100 +1849,100 @@ msgstr "צלצול מרוחק..." msgid "Early media." msgstr "מדיה מוקדמת." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "שיחה עם %s מושהית." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "קריאה נענתה על ידי %s - בהמתנה." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "קריאה חודשה." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "קריאה נענתה על ידי %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "חוסר תאימות, בדוק קודקים או הגדרות אבטחה..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "פרמטריי מדיה חסרי תואמים." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "חזרנו." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "אנו מושהים על ידי צד אחר." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "שיחה עודכנה מרחוק." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "קריאה הסתיימה." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "משתמש עסוק כעת." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "משתמש לא זמין זמנית." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "משתמש לא מעוניין שיפריעו לו." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "קריאה סורבה." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "מכוון מחדש" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "קריאה נכשלה." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "רישום אצל %s הושלם בהצלחה." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "אי רישום אצל %s סוים." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "אין היענות תוך זמן מוגדר" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "רישום אצל %s נכשל: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1948,11 +1952,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "אות האימות הינה %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/hu.po b/po/hu.po index a32fbab4c..1a20cf6c7 100644 --- a/po/hu.po +++ b/po/hu.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Hungarian (http://www.transifex.com/projects/p/linphone-gtk/language/hu/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "én" msgid "Couldn't find pixmap file: %s" msgstr "Nemtalálható a pixmap fájl: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "Futás közben némi hibakeresési információ az stdout-ra naplózása." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "fájl elérési útja, melybe a naplók kerülnek." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Linphone indítása, videó kikpacsolva. " -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Csak a tálcaikon indítása, ne mutassa a fő ablakot." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "Cím azonnali híváshoz" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Adjon meg egy munkakönyvtárat (ennek az installációs könyvtárnak kéne lennie, pl. C:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s szeretné Önt hozzáadni partnerlistájához.\nSzeretné megengedni neki, hogy lássa az Ön jelenlétét, illetve hozzá szeretné adni a partnerlistához?\nHa nemmel válaszol, ez a személy átmenetileg tiltólistára kerül." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Hiba a hívás közben" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Hívás vége" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Hívás fogadása" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Elutasítás" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Hívás várakoztatva" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "a következő által: %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s szerené elidítani a videót. Elfogadja?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Internetes oldal" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - internetes videó telefon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Alapértelmezett)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Át vagyunk irányítva ide: %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Hangkártya nincs érzékelve ezen a számítógépen.\nNem fog tudni hang hívásokat küldeni vagy fogadni." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Egy ingyenes SIP video-telefon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "Hozzáadás címjegyzékhez" msgid "Presence status" msgstr "Jelenlét státusz" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Név" @@ -256,124 +260,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "Új partner hozzáadása ebből a könyvtárból: %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Érték (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Állapot" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Paraméterek" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Engedélyezve" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Tiltva" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Hozzáférés" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "angol" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "francia" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "svéd" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "olasz" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "spanyol" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "brazil-portugál" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "lengyel" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "német" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "orosz" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "japán" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "holland" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "magyar" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "cseh" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "egyszerúsített kínai" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "tradícionális kínai" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "norvég" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "héber" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Újra kell indítania a linphone-t, hogy az új nyelv kiválasztása érvényre jusson. " -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Nincs" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -415,133 +419,133 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Fiók létrehozása a linphone.org -on" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Már rendelkezem linphone.org fiókkal, azt szeretném használni" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "Már rendelkezem sip fiókkal, azt szeretném használni" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Adja meg linphone.org felhasználónevét" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Felhasználónév:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Jelszó:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Írja be fiókinformációit" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Felhasználónév*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Jelszó*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Tartomány" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Mező kitöltése szükséges" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Felhasználónév: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Jelszó: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "E-mail: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Jelszó megerősítése: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Hiba, a fiók nincs érvényesítve. Valaki már használja ezt a felhasználónevet vagy a kiszolgáló nem elérhető.\nKérjük, lépjen vissza és próbálja újra." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Köszönjük! Az Ön fiókját beállítottuk és használatra kész." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Kérjük, érvényesítse fiókját az általunk elektronikus levélben küldött hivatkozásra kattintva.\nAzután térjen vissza ide és kattintson a Következő gombra." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "A fiók beállítása varázsló üdvözli Önt" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Fiók beállítása varázsló" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Az Ön fiókjának beállítása (1/1 lépés)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Adja meg sip felhasználónevét (1/2 lépés)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Adja meg a fiókinformációt (1/2 lépés)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Érvényesítés (2/2 lépés)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Hiba" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Befejezés" @@ -1178,307 +1182,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Beállítások" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Maximum Továbbítási Egység beállítása:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "DTMF küldése SIP infóként" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Átvitel" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Audió RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Javítva" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Videó RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Média titkosítás típusa" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Média titkosítás kötelező" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Alagút" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "DSCP mezők" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Hálózati protokoll és port" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Közvetlen Internet kapcsolat" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "NAT / tűzfal mögött (STUN használata a feloldáshoz)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "NAT / tűzfal mögött (ICE használata)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "NAT / tűzfal mögött (uPnP használata)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Publikus IP cím:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN kiszolgáló:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT és tűzfal" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Hálózati beállítások" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Csengőhang:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Különleges ALSA eszköz (nem kötelező):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Felvevő hang eszköz:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Csengőhang eszköz:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Lejátszó hang eszköz:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Visszhang-elnyomás engedélyezése" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Audió" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Videó bemeneti eszköz:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Kívánt videó felbontás:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Videó" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Multimédia beállítások" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Ez a rész határozza meg az Ön SIP címét, amikor nem használ SIP fiókot" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Az Ön megjelenített neve (pl. Kis József):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Az Ön felhasználóneve:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Az Ön így keletkezett SIP címe:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Alapértelmezett identitás" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Varázsló" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Hozzáadás" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Szerkesztés" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Eltávolítás" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Proxy fiókok" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Minden kulcsszó törlése" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Titoktartás" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "SIP fiókok beállítása" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Engedélyezés" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Tiltás" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Kódekek" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "A 0 jelentése \"végtelen\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Feltöltési sebesség korlát (kbit/mp):" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Letöltési sebesség korlát (kbit/mp):" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Alkalmazkodó mérték-szabályozás engedélyezése" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Az alkalmazkodó mérték-szabályozás egy módszer, mely erőteljesen próbálja megállapítani a rendelkezésre álló sávszélességet hívás alatt." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Sávszélesség szabályozása" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Kódekek" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Nyelv" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Haladó beállítások megjelenítése" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Szint" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Felhasználói környezet" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Kész" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Partnerek keresése könyvtárban" @@ -1491,10 +1499,6 @@ msgstr "Hozzáadása a listámhoz" msgid "Search somebody" msgstr "Keres valakit" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Kérem várjon" @@ -1694,68 +1698,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Kész" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Telefonszám-cél keresése..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Nem sikkerült értelmezni a számot." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Kapcsolódás" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Nem sikerült hívni" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Elnézést, elértük a egyidejű hívások maximális számát" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "kapcsolatba lépett veled." -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "és automatikus választ kért." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "A hívási jellemzők módosítása..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Kapcsolódva." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Hívás megszakítva" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Nem sikerült várakoztatni a hívást" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Jelenlegi hívás várakoztatásának aktiválása..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Stun keresés folyamatban..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "ICE helyi jelentkezők begyűjtése folyamatban..." @@ -1840,100 +1844,100 @@ msgstr "Távoli csengés..." msgid "Early media." msgstr "Korai médiák." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "A hívás a következővel: %s várakoztatva" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "%s fogadta a hívást - várakoztatva." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Hívás visszatért" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "%s válaszolt a hívásra." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Nem kompatibilis, ellenőrizze a kódek- vagy a biztonsági beállításokat..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Nem kompatibilis médiajellemzők." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Visszatértünk." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "Megállítva a másik fél által." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "A hívás távolról frissítve." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "A hívás befejezve." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "A felhasználó foglalt." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "A felhasználó ideiglenesen nem elérhető" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "A felhasználó nem akarja, hogy zavarják." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Hívás elutasítva" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Átirányítva" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Nem sikerült a hívás." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "A regisztáció a %s -n sikerült." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "A kiregisztrálás kész a következőn: %s ." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "időtúllépés után nincs válasz" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "A regisztáció a %s -n nem sikerült: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1943,11 +1947,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "Hitelesítési jel: %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/it.po b/po/it.po index 6c369ce0a..a801a9acf 100644 --- a/po/it.po +++ b/po/it.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Italian (http://www.transifex.com/projects/p/linphone-gtk/language/it/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s voui aggiungere il tuo contatto alla sua listaVoui permettere che lui veda il tuo stato o aggiungerlo alla tua lista dei contatti Se rispondi no questo utente sarà momentaneamente bloccato." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Chiamata terminata" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Chimata in entrata" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Rifiuta" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" + +#: ../gtk/main.c:1569 +msgid "A video internet phone" msgstr "" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "" msgid "Presence status" msgstr "Presenza" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nome" @@ -256,124 +260,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "Aggiungi nuovo contatto dalla directory %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Stato" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parametri" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Attivato" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Disattivato" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Inglese" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Francese" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Svedese" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Spagnolo" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polacco" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Tedesco" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Russo" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Giapponese" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Olandese" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Ungherese" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Ceco" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Riavviare il software per utilizzare la nuova lingua selezionata" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -415,133 +419,133 @@ msgid_plural "Found %i contacts" msgstr[0] "Trovato %i contatto" msgstr[1] "Trovato %i contatti" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Manuale utente" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Password:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Grazie. Il tuo account è configurato e pronto all'uso" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Benvenuto nel configuratore di account" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Configuratore di account" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1178,307 +1182,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Preferenze" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Imposta Maximum Transmission Unit:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Invia DTMF come SIP info" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Transporto" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Audio RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Video RTP/UDP" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Connessione diretta a internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Dietro NAT / Firewall (utilizza STUN)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Indirizzo ip pubblico:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stun server:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT and Firewall" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Impostazioni di rete" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Suoneria:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Dispositivo ALSA (optional):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Dispositivo microfono:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Dispositivo squillo:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Dispositivo uscita audio:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Attiva cancellazione eco" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Audio" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Dispositivo Video:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Risoluzione video preferita" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Impostazioni multimediali" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "questa sezione definisce il tuo indirizzo SIP se non hai account attivi" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Nome visualizzato (es: Mario Rossi):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Username" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Il tuo indirizzo sip:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Identità di default" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Aggiungi" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Edita" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Rimuovi" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Account proxy" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Cancella tutte le password" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Privacy" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Gestici SIP Account" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Attivato" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Disattivato" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 sta per illimitato" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Velocità massima in upload Kbit/sec:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Velocita massima in Dowload Kbit/sec" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Gestione banda" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Codec" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Linguaggio" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Interfaccia utente" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Fatto" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Cerca contatti nella directory" @@ -1491,10 +1499,6 @@ msgstr "Aggiungi alla mia lista" msgid "Search somebody" msgstr "Cerca" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Prego attendere" @@ -1694,68 +1698,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Pronto" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Ricerca numero destinazione..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Impossibile risolvere il numero." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "In connessione" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Connessione" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Ricerca Stun in progresso ..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1840,100 +1844,100 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Chiamata terminata." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Utente occupato" -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Utente non disponibile" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "L'utente non vuole essere disturbato" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Chiamata rifiutata" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registrazione su %s attiva" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Unregistrazione su %s" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "timeout no risposta" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrazione su %s fallita: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1943,11 +1947,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/ja.po b/po/ja.po index 6b9b7e926..3707eeab9 100644 --- a/po/ja.po +++ b/po/ja.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Japanese (http://www.transifex.com/projects/p/linphone-gtk/language/ja/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "自分" msgid "Couldn't find pixmap file: %s" msgstr "pixmapファイルが見つかりません %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "実行中にいくつかのデバッグ情報をstdoutに送信します。" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "ログを書き込むファイルへのパス。" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "ビデオを無効にしてLinphoneを開始します。" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "主なインターフェイスを表示しないでシステムトレイに移動します。" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "今すぐに呼び出す" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "作業ディレクトリをSpecifiy (インストールした時のベースである必要があります。例:c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "設定ファイル" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "オーディオアシスタントを実行" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s が連絡相手にあなたを追加しようとしています。\nあなたのステータスを参照させるか、もしくは連絡先リストに追加することができます。\nあなたが拒否すると、この人は一時的にブラックリストへ登録されます。" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "呼出エラー" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "呼出終了" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "着信" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "応答" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒否" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "呼び出しの一時停止" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "ウェブサイトリンク" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - ビデオインターネット電話" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (デフォルト)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "%s に転送しました" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "無料 SIP ビデオ-電話" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "電話帳に追加する" msgid "Presence status" msgstr "状態のステータス" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "名前" @@ -256,124 +260,124 @@ msgstr "'%s' のチャット履歴を削除" msgid "Add new contact from %s directory" msgstr "" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "レート (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "状態" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "IP ビットレート (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "パラメーター" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "使用する" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "使用しない" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "アカウント" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Português do Brasil" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Pусский" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "繁体中文" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Norsk" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Cрпски" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "言語の選択を有効にするには、 Linphoneを再起動する必要があります。" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "なし" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -414,133 +418,133 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "%i 件発見" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "ようこそ!\nあなたの通話のためのSIPアカウント設定をお手伝いします。" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "linphone.orgのアカウントを作成" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "linphone.orgのアカウントを持っているのでそれを使います" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "SIPアカウントを持っているのでそれを使います" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "linphone.orgで取得したユーザー名を入力" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "ユーザー名:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "パスワード:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "アカウント情報を入力" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "ユーザー名*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "パスワード*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "ドメイン*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "プロキシ*" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) 必須" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "ユーザー名: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "パスワード: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "メールアドレス: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "パスワードを再入力: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "アップデートでLinphoneを常に最新にする" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "ありがとう。あなたのアカウントは無事に設定され、使用する準備ができました。" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "送信されたメールの本文内にあるリンクをクリックしてアカウントを有効にしてください。\nその後こちらへ戻って「次へ」を押してください。" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "SIPアカウント設定アシスタント" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "アカウント設定アシスタントへようこそ" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "アカウント設定アシスタント" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "アカウントを設定します (1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "SIPのユーザー名を入力してください (1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "アカウント情報を入力してください (1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "検証します (2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "エラー" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "終了" @@ -1177,307 +1181,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "設定" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "DTMFをSIP情報で送信する" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "転送" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "SIP/UDP ポート" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "SIP/TCP ポート" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "オーディオ RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "ビデオ RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "メディアの暗号化の種類" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "トンネル" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "DSCP値" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "ネットワークのプロトコルとポート" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "パブリック IP アドレス:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stunサーバー:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT と ファイヤーウォール" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "ネットワーク設定" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "鳴動音:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "エコーキャンセラーを有効にする" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "オーディオ" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "ビデオ" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "マルチメディア設定" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "あなたの表示名 (例: John Doe):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "あなたのユーザー名:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "ウィザード" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "追加する" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "編集する" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "削除する" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "プロキシアカウント" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "すべてのパスワードを消去する" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "プライバシー" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "使用する" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "使用しない" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "コーデック" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "アップロード速度制限 Kbit/sec:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "ダウンロード速度制限 Kbit/sec:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "帯域幅制御" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "コーデック" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "言語" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "拡張設定を表示する" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "レベル" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "ユーザーインターフェイス" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "サーバーアドレス:" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "完了" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1490,10 +1498,6 @@ msgstr "" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "お待ちください" @@ -1693,68 +1697,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "準備" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "と自動応答を尋ねる" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "コールパラメーターの変更..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "接続しました。" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "呼び出しを打ち切る" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "呼び出しを一時停止できませんでした" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "現在の通話を一時停止..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Stunによるルックアップの進行中…" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1839,100 +1843,100 @@ msgstr "" msgid "Early media." msgstr "Early media." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "呼び出し終了。" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "相手はビジーです。" -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "相手は、今出られません。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "相手は手が離せないようです。" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "通話は拒否されました。" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "リクエストは時間切れです。" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1942,11 +1946,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nb_NO.po b/po/nb_NO.po index 07c3a2728..0d6edd4df 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/p/linphone-gtk/language/nb_NO/)\n" "MIME-Version: 1.0\n" @@ -88,45 +88,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Fant ikke pixmap fli: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "skriv logg-informasjon under kjøring" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Start skjult i systemkurven, ikke vis programbildet." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "address som skal ringes nå" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Spesifiser arbeidsmappe (bør være base for installasjonen, f.eks: c:\\Programfiler\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -134,76 +134,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s vil legge deg til i hans/hennes kontaktliste.\nVil du tillate vedkommende å se din tilstedestatus eller legge vedkommende i din kontaktliste?\nHvis du svarer nei vil personen bli svartelyst midlertidig." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Samtale avsluttet" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Svarer" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avvis" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Peker til nettsted" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - en video Internet telefon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Standard)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Vi er overført til %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Klarte ikke å finne noe lydkort på denne datamaskinen.\nDu vil ikke kunne sende eller motta lydsamtaler." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -216,7 +220,7 @@ msgstr "" msgid "Presence status" msgstr "Tilstedestatus" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Navn" @@ -257,124 +261,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "Legg til kontakt fra %s katalogen" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Frekvens (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parametere" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "På" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Av" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Engelsk" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Svensk" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italisensk" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Spansk" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Portugisisk" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polsk" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Tysk" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Russisk" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japansk" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Nederlandsk" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Ungarsk" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Tjekkisk" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Kinesisk" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du må restarte linphone for at det nye språkvalget skal iverksettes." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -416,133 +420,133 @@ msgid_plural "Found %i contacts" msgstr[0] "Fant kontakt %i" msgstr[1] "Hittat kontakt %i" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Brukernavn:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Passord:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Takk. Ditt konto er nå satt opp og klart til bruk." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Velkommen til brukerkontoveiviseren" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Brukerkontoveiviser" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1179,307 +1183,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Innstillinger" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Velg MTU (Maximum Transmission Unit):" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Send DTMF som SIP-info" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Transport" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Lyd RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Video RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Tilkoblet Internett direkte" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Bak NAT / Brannmur (bruk STUN for å avgjøre)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Offentlig IP-addresse:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN tjener:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT og Brannvegg" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Nettverksinnstillinger" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Ringelyd:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Spesiell ALSA enhet (valgfritt):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Mikrofonenhet:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Ringe-enhet:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Avspillingsenhet:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Bruk ekko-kansellering" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Lyd" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Videoenhet:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Foretrukke video-oppløsning:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Multimediainnstillinger" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Denne seksjonen velger SIP-addresse når du ikke bruker en SIP-konto" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Vist navn (eks: Ola Nordmann):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Ditt brukernavn:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Din resulterende SIP addresse:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Standard identitet" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Legg til" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Rediger" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Fjern" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Proxy kontoer" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Slett alle passord" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Personvern" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Behandle SIP-kontoer" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Aktiver" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Deaktiver" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Kodeker" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 betyr \"ubegrenset\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Maks opplastningshastighet i Kbit/sek:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Nedlastningsbegrensning i Kbit/sek:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Båndbreddekontrol" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Kodek" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Språk" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Vis avanserte innstillinger" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Nivå" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Brukergrensesnitt" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Ferdig" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Søk kontakter i katalogen" @@ -1492,10 +1500,6 @@ msgstr "Legg til listen min" msgid "Search somebody" msgstr "Søk noen" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Vennligst vent" @@ -1695,68 +1699,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Klar" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Ser etter telefonnummer for destinasjonen..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Kan ikke tilkoble dette nummeret." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Tilknytter" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Kunne ikke ringe" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Beklager, du har nådd maksimalt antall samtidige samtaler" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "Kontakter deg." -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " og ba om autosvar." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Endrer ringeparametre..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Tilkoblet" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Samtale avbrutt" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Kunne ikke pause samtalen" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Pauser nåværende samtale" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "STUN oppslag pågår..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1841,100 +1845,100 @@ msgstr "" msgid "Early media." msgstr "Tidlig media" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "Samtalen med %s er pauset." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Samtale besvart av %s - på vent." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Samtale gjenopptatt." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "Samtale besvart av %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Samtale avsluttet." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Brukeren er opptatt." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Brukeren er midlertidig ikke tilgjengelig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Brukeren vil ikke bli forstyrret." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Samtale avvist." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Omdirigert" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Samtale feilet." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lykkes." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lykkes." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "ingen svar innen angitt tid" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislykkes: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1944,11 +1948,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/nl.po b/po/nl.po index 3b0b86a42..98034aaaf 100644 --- a/po/nl.po +++ b/po/nl.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Dutch (http://www.transifex.com/projects/p/linphone-gtk/language/nl/)\n" "MIME-Version: 1.0\n" @@ -88,45 +88,45 @@ msgstr "Ik" msgid "Couldn't find pixmap file: %s" msgstr "Het pixmap-bestand %s kon niet worden gevonden" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "loggen naar stdout om wat foutopsporingsinformatie te verkrijgen tijdens uitvoeren." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "Pad naar een bestand om logbestanden heen te schrijven." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Linphone opstarten met uitgeschakelde video." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Alleen in het systeemvak opstarten, niet met venster en al." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "adres om nu naar toe te bellen" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Specificeer een werkmap (dit moet de basis van uw installatie zijn, bijv.: C:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Configuratiebestand" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Doorloop de audio-instelwizard" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "Draai een zelftest en exit 0 wanneer succesvol" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -134,76 +134,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s wil u toevoegen aan zijn/haar contactpersonenlijst.\nWilt u toestaan dat hij/zij uw aanwezigheidsstatus ziet of hem/haar toevoegen aan uw contactpersonenljst?\nIndien u nee antwoordt, zal deze persoon tijdelijk op de zwarte lijst worden gezet." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Vul uw wachtwoord in voor gebruikersnaam %s\nop realm %s" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Oproepfout" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Oproep beëindigd" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkomende oproep" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Opnemen" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Weigeren" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Oproep gepauzeerd" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "door %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s stelt u voor om video in te schakelen. Wilt u dit accepteren?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Websitelink" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - een video-internettelefoon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Standaard)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "We zijn overgeschakeld naar %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Er zijn geluidskaarten aangetroffen op deze computer.\nU zult niet in staat zijn om audio-oproepen te ontvangen of versturen." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Een gratis SIP-videotelefoon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -216,7 +220,7 @@ msgstr "Toevoegen aan adresboek" msgid "Presence status" msgstr "Aanwezigheidsstatus" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Naam" @@ -257,124 +261,124 @@ msgstr "Chatgeschiedenis van '%s' verwijderen" msgid "Add new contact from %s directory" msgstr "Nieuw contactpersoon toevoegen vanuit de map %s" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Frequentie (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "IP-bitrate (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Argumenten" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Ingeschakeld" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Uitgeschakeld" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Engels" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Frans" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Zweeds" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiaans" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Spaans" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Braziliaans Portugees" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Pools" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Duits" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japans" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Hongaars" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Tjechisch" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Chinees" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Traditioneel Chinees" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Noors" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "Hebreeuws" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Servisch" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "U moet linphone herstarten om de nieuw geselecteerde taal toe te passen." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Geen" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -416,133 +420,133 @@ msgid_plural "Found %i contacts" msgstr[0] "%i contactpersoon gevonden" msgstr[1] "%i contactpersonen gevonden" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Welkom!\nDeze instelwizard zal u begeleiden bij het gebruiken van een SIP-account voor oproepen." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Creëer een account op linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Ik heb al een linphone.org-account en wil deze graag gebruiken" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "Ik heb al een SIP-account en wil deze graag gebruiken" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "Ik wil een externe URI-configuratie opgeven" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Vul uw linphone.org-gebruikersnaam in" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Gebruikersnaam:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Wachtwoord:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Vul uw accountinformatie in" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Gebruikersnaam*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Wachtwoord*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Domeinnaam*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Proxy" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Verplichte velden" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Gebruikersnaam: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Wachtwoord: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "E-mailadres: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Bevestig uw wachtwoord: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "Houdt me op de hoogte van linphone-updates" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Er is een fout opgetreden: uw account is niet gevalideerd, de gebruikersnaam wordt al door iemand anders gebruikt of de server is onbereikbaar.\nGa terug en probeer het opnieuw." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Bedankt. Uw account is nu ingesteld en klaar voor gebruik." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Valideer uw account door te klikken op de link die we zojuist naar uw e-mailadres hebben verstuurd.\nKom dan terug naar dit venster en klik op de knop Volgende." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "SIP-account-instelwizard" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Welkom bij de account-instelwizard" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Account-instelwizard" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Uw account instellen (stap 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Vul uw SIP-gebruikersnaam in (stap 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Vul uw accountinformatie in (stap 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Geldigheid (stap 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Fout" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Bezig met vernietigen" @@ -1179,307 +1183,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Instellingen" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Maximale Transmissie-unit instellen:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "DTMF's als SIP-informatie versturen" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Overdracht" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "SIP/UDP-poort" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "Willekeurig" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "SIP/TCP-poort" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "AUDIO RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Vastgezet" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Video RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Mediaversleutelingstype" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Mediaversleuteling is vereist" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Tunnel" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "DSCP-velden" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Netwerkprotocol en -poorten" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Directe verbinding met het internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "Achter een NAT / Firewall (specificeer de gateway IP)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Openbaar IP-adres:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stun-server" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT en Firewall" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Netwerkinstellingen" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Belgeluid:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "ALSA speciaal apparaat (optioneel)" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Opnameapparaat:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Belapparaat:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Afspeelapparaat:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Echo-onderdrukking inschakelen" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Audio" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Videoingang-apparaat:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Voorkeursvideoresolutie:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Videouitgangsmethode:" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "Cameravoorbeeld weergeven" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Multimedia-instellingen" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Uw weergavenaam (bijv.: Jan Noniem):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Uw gebruikersnaam:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Standaardidentiteit" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Instelhulp" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Toevoegen" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Bewerken" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Verwijderen" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Aan" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Uit" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1492,10 +1500,6 @@ msgstr "" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "" @@ -1695,68 +1699,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Gereed." -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Zoekt de lokatie van het telefoonnummer..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Kon dit nummer niet vinden." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Verbinden" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Verbonden." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "STUN adres wordt opgezocht..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1841,100 +1845,100 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Oproep beeindigd." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Gebruiker is bezet." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Gebruiker is tijdelijk niet beschikbaar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "De gebruiker wenst niet gestoord te worden." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Oproep geweigerd." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registratie op %s gelukt." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1944,11 +1948,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pl.po b/po/pl.po index 0b5ddec6c..6dbfbfdb0 100644 --- a/po/pl.po +++ b/po/pl.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/language/pl/)\n" "MIME-Version: 1.0\n" @@ -89,45 +89,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Nie można znaleźć pixmapy: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -135,76 +135,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" msgstr "" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -217,7 +221,7 @@ msgstr "" msgid "Presence status" msgstr "" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nazwa" @@ -258,124 +262,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Jakość (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parametr" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Włączone" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Wyłączone" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -418,133 +422,133 @@ msgstr[0] "" msgstr[1] "" msgstr[2] "" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1181,307 +1185,311 @@ msgid "C" msgstr "" #: ../gtk/parameters.ui.h:11 -msgid "Settings" +msgid "SIP (UDP)" msgstr "" #: ../gtk/parameters.ui.h:12 -msgid "Set Maximum Transmission Unit:" +msgid "SIP (TCP)" msgstr "" #: ../gtk/parameters.ui.h:13 -msgid "Send DTMFs as SIP info" +msgid "SIP (TLS)" msgstr "" #: ../gtk/parameters.ui.h:14 -msgid "Allow IPv6" +msgid "Settings" msgstr "" #: ../gtk/parameters.ui.h:15 -msgid "Transport" +msgid "Set Maximum Transmission Unit:" msgstr "" #: ../gtk/parameters.ui.h:16 -msgid "SIP/UDP port" +msgid "Send DTMFs as SIP info" +msgstr "" + +#: ../gtk/parameters.ui.h:17 +msgid "Allow IPv6" msgstr "" #: ../gtk/parameters.ui.h:18 -msgid "Random" +msgid "Transport" msgstr "" #: ../gtk/parameters.ui.h:19 -msgid "SIP/TCP port" -msgstr "" - -#: ../gtk/parameters.ui.h:20 -msgid "Audio RTP/UDP:" +msgid "SIP/UDP port" msgstr "" #: ../gtk/parameters.ui.h:21 -msgid "Fixed" +msgid "Random" msgstr "" #: ../gtk/parameters.ui.h:22 -msgid "Video RTP/UDP:" +msgid "SIP/TCP port" msgstr "" #: ../gtk/parameters.ui.h:23 -msgid "Media encryption type" +msgid "Audio RTP/UDP:" msgstr "" #: ../gtk/parameters.ui.h:24 -msgid "Media encryption is mandatory" +msgid "Fixed" msgstr "" #: ../gtk/parameters.ui.h:25 -msgid "Tunnel" +msgid "Video RTP/UDP:" msgstr "" #: ../gtk/parameters.ui.h:26 -msgid "DSCP fields" +msgid "Media encryption type" msgstr "" #: ../gtk/parameters.ui.h:27 -msgid "Network protocol and ports" +msgid "Media encryption is mandatory" msgstr "" #: ../gtk/parameters.ui.h:28 -msgid "Direct connection to the Internet" +msgid "Tunnel" msgstr "" #: ../gtk/parameters.ui.h:29 -msgid "Behind NAT / Firewall (specify gateway IP )" +msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:30 -msgid "Behind NAT / Firewall (use STUN to resolve)" +msgid "Network protocol and ports" msgstr "" #: ../gtk/parameters.ui.h:31 -msgid "Behind NAT / Firewall (use ICE)" +msgid "Direct connection to the Internet" msgstr "" #: ../gtk/parameters.ui.h:32 -msgid "Behind NAT / Firewall (use uPnP)" +msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" #: ../gtk/parameters.ui.h:33 -msgid "Public IP address:" +msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "" #: ../gtk/parameters.ui.h:34 -msgid "Stun server:" +msgid "Behind NAT / Firewall (use ICE)" msgstr "" #: ../gtk/parameters.ui.h:35 -msgid "NAT and Firewall" +msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:36 -msgid "Network settings" +msgid "Public IP address:" msgstr "" #: ../gtk/parameters.ui.h:37 -msgid "Ring sound:" +msgid "Stun server:" msgstr "" #: ../gtk/parameters.ui.h:38 -msgid "ALSA special device (optional):" +msgid "NAT and Firewall" msgstr "" #: ../gtk/parameters.ui.h:39 -msgid "Capture device:" +msgid "Network settings" msgstr "" #: ../gtk/parameters.ui.h:40 -msgid "Ring device:" +msgid "Ring sound:" msgstr "" #: ../gtk/parameters.ui.h:41 -msgid "Playback device:" +msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:42 -msgid "Enable echo cancellation" +msgid "Capture device:" msgstr "" #: ../gtk/parameters.ui.h:43 -msgid "Audio" +msgid "Ring device:" msgstr "" #: ../gtk/parameters.ui.h:44 -msgid "Video input device:" +msgid "Playback device:" msgstr "" #: ../gtk/parameters.ui.h:45 -msgid "Prefered video resolution:" +msgid "Enable echo cancellation" msgstr "" #: ../gtk/parameters.ui.h:46 -msgid "Video output method:" +msgid "Audio" msgstr "" #: ../gtk/parameters.ui.h:47 -msgid "Show camera preview" +msgid "Video input device:" msgstr "" #: ../gtk/parameters.ui.h:48 -msgid "Video" +msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:49 -msgid "Multimedia settings" +msgid "Video output method:" msgstr "" #: ../gtk/parameters.ui.h:50 -msgid "This section defines your SIP address when not using a SIP account" +msgid "Show camera preview" msgstr "" #: ../gtk/parameters.ui.h:51 -msgid "Your display name (eg: John Doe):" +msgid "Video" msgstr "" #: ../gtk/parameters.ui.h:52 -msgid "Your username:" +msgid "Multimedia settings" msgstr "" #: ../gtk/parameters.ui.h:53 -msgid "Your resulting SIP address:" +msgid "This section defines your SIP address when not using a SIP account" msgstr "" #: ../gtk/parameters.ui.h:54 -msgid "Default identity" +msgid "Your display name (eg: John Doe):" msgstr "" #: ../gtk/parameters.ui.h:55 -msgid "Wizard" +msgid "Your username:" msgstr "" #: ../gtk/parameters.ui.h:56 -msgid "Add" +msgid "Your resulting SIP address:" msgstr "" #: ../gtk/parameters.ui.h:57 -msgid "Edit" +msgid "Default identity" msgstr "" #: ../gtk/parameters.ui.h:58 -msgid "Remove" +msgid "Wizard" msgstr "" #: ../gtk/parameters.ui.h:59 -msgid "Proxy accounts" +msgid "Add" msgstr "" #: ../gtk/parameters.ui.h:60 -msgid "Erase all passwords" +msgid "Edit" msgstr "" #: ../gtk/parameters.ui.h:61 -msgid "Privacy" +msgid "Remove" msgstr "" #: ../gtk/parameters.ui.h:62 -msgid "Automatically answer when a call is received" +msgid "Proxy accounts" msgstr "" #: ../gtk/parameters.ui.h:63 -msgid "Auto-answer" +msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:64 -msgid "Manage SIP Accounts" +msgid "Privacy" msgstr "" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 -msgid "Enable" -msgstr "Włączony" +#: ../gtk/parameters.ui.h:65 +msgid "Automatically answer when a call is received" +msgstr "" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 -msgid "Disable" -msgstr "Wyłącz" +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" #: ../gtk/parameters.ui.h:67 -msgid "Codecs" +msgid "Auto-answer" msgstr "" #: ../gtk/parameters.ui.h:68 -msgid "0 stands for \"unlimited\"" +msgid "Manage SIP Accounts" msgstr "" -#: ../gtk/parameters.ui.h:69 -msgid "Upload speed limit in Kbit/sec:" -msgstr "" +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 +msgid "Enable" +msgstr "Włączony" -#: ../gtk/parameters.ui.h:70 -msgid "Download speed limit in Kbit/sec:" -msgstr "" +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 +msgid "Disable" +msgstr "Wyłącz" #: ../gtk/parameters.ui.h:71 -msgid "Enable adaptive rate control" +msgid "Codecs" msgstr "" #: ../gtk/parameters.ui.h:72 +msgid "0 stands for \"unlimited\"" +msgstr "" + +#: ../gtk/parameters.ui.h:73 +msgid "Upload speed limit in Kbit/sec:" +msgstr "" + +#: ../gtk/parameters.ui.h:74 +msgid "Download speed limit in Kbit/sec:" +msgstr "" + +#: ../gtk/parameters.ui.h:75 +msgid "Enable adaptive rate control" +msgstr "" + +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1494,10 +1502,6 @@ msgstr "" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "" @@ -1697,68 +1701,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Połączony" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1843,100 +1847,100 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Osoba jest zajęta." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Osoba jest tymczasowo niedostępna." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Osoba nie chce, aby jej przeszkadzać." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Rozmowa odrzucona." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1946,11 +1950,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/pt_BR.po b/po/pt_BR.po index 0ff0e6705..00d0b57e3 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/linphone-gtk/language/pt_BR/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Não é possível achar arquivo pixmap: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Camadas recebidas" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" msgstr "" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "" msgid "Presence status" msgstr "Status de presença" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nome" @@ -256,124 +260,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Taxa (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parâmetros" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Ativado" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Desativado" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Nenhum" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -415,133 +419,133 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1178,307 +1182,311 @@ msgid "C" msgstr "" #: ../gtk/parameters.ui.h:11 -msgid "Settings" +msgid "SIP (UDP)" msgstr "" #: ../gtk/parameters.ui.h:12 -msgid "Set Maximum Transmission Unit:" +msgid "SIP (TCP)" msgstr "" #: ../gtk/parameters.ui.h:13 -msgid "Send DTMFs as SIP info" +msgid "SIP (TLS)" msgstr "" #: ../gtk/parameters.ui.h:14 -msgid "Allow IPv6" +msgid "Settings" msgstr "" #: ../gtk/parameters.ui.h:15 -msgid "Transport" +msgid "Set Maximum Transmission Unit:" msgstr "" #: ../gtk/parameters.ui.h:16 -msgid "SIP/UDP port" +msgid "Send DTMFs as SIP info" +msgstr "" + +#: ../gtk/parameters.ui.h:17 +msgid "Allow IPv6" msgstr "" #: ../gtk/parameters.ui.h:18 -msgid "Random" +msgid "Transport" msgstr "" #: ../gtk/parameters.ui.h:19 -msgid "SIP/TCP port" -msgstr "" - -#: ../gtk/parameters.ui.h:20 -msgid "Audio RTP/UDP:" +msgid "SIP/UDP port" msgstr "" #: ../gtk/parameters.ui.h:21 -msgid "Fixed" +msgid "Random" msgstr "" #: ../gtk/parameters.ui.h:22 -msgid "Video RTP/UDP:" +msgid "SIP/TCP port" msgstr "" #: ../gtk/parameters.ui.h:23 -msgid "Media encryption type" +msgid "Audio RTP/UDP:" msgstr "" #: ../gtk/parameters.ui.h:24 -msgid "Media encryption is mandatory" +msgid "Fixed" msgstr "" #: ../gtk/parameters.ui.h:25 -msgid "Tunnel" +msgid "Video RTP/UDP:" msgstr "" #: ../gtk/parameters.ui.h:26 -msgid "DSCP fields" +msgid "Media encryption type" msgstr "" #: ../gtk/parameters.ui.h:27 -msgid "Network protocol and ports" +msgid "Media encryption is mandatory" msgstr "" #: ../gtk/parameters.ui.h:28 -msgid "Direct connection to the Internet" +msgid "Tunnel" msgstr "" #: ../gtk/parameters.ui.h:29 -msgid "Behind NAT / Firewall (specify gateway IP )" +msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:30 -msgid "Behind NAT / Firewall (use STUN to resolve)" +msgid "Network protocol and ports" msgstr "" #: ../gtk/parameters.ui.h:31 -msgid "Behind NAT / Firewall (use ICE)" +msgid "Direct connection to the Internet" msgstr "" #: ../gtk/parameters.ui.h:32 -msgid "Behind NAT / Firewall (use uPnP)" +msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" #: ../gtk/parameters.ui.h:33 -msgid "Public IP address:" +msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "" #: ../gtk/parameters.ui.h:34 -msgid "Stun server:" +msgid "Behind NAT / Firewall (use ICE)" msgstr "" #: ../gtk/parameters.ui.h:35 -msgid "NAT and Firewall" +msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:36 -msgid "Network settings" +msgid "Public IP address:" msgstr "" #: ../gtk/parameters.ui.h:37 -msgid "Ring sound:" +msgid "Stun server:" msgstr "" #: ../gtk/parameters.ui.h:38 -msgid "ALSA special device (optional):" +msgid "NAT and Firewall" msgstr "" #: ../gtk/parameters.ui.h:39 -msgid "Capture device:" +msgid "Network settings" msgstr "" #: ../gtk/parameters.ui.h:40 -msgid "Ring device:" +msgid "Ring sound:" msgstr "" #: ../gtk/parameters.ui.h:41 -msgid "Playback device:" +msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:42 -msgid "Enable echo cancellation" +msgid "Capture device:" msgstr "" #: ../gtk/parameters.ui.h:43 -msgid "Audio" +msgid "Ring device:" msgstr "" #: ../gtk/parameters.ui.h:44 -msgid "Video input device:" +msgid "Playback device:" msgstr "" #: ../gtk/parameters.ui.h:45 -msgid "Prefered video resolution:" +msgid "Enable echo cancellation" msgstr "" #: ../gtk/parameters.ui.h:46 -msgid "Video output method:" +msgid "Audio" msgstr "" #: ../gtk/parameters.ui.h:47 -msgid "Show camera preview" +msgid "Video input device:" msgstr "" #: ../gtk/parameters.ui.h:48 -msgid "Video" +msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:49 -msgid "Multimedia settings" +msgid "Video output method:" msgstr "" #: ../gtk/parameters.ui.h:50 -msgid "This section defines your SIP address when not using a SIP account" +msgid "Show camera preview" msgstr "" #: ../gtk/parameters.ui.h:51 -msgid "Your display name (eg: John Doe):" +msgid "Video" msgstr "" #: ../gtk/parameters.ui.h:52 -msgid "Your username:" +msgid "Multimedia settings" msgstr "" #: ../gtk/parameters.ui.h:53 -msgid "Your resulting SIP address:" +msgid "This section defines your SIP address when not using a SIP account" msgstr "" #: ../gtk/parameters.ui.h:54 -msgid "Default identity" +msgid "Your display name (eg: John Doe):" msgstr "" #: ../gtk/parameters.ui.h:55 -msgid "Wizard" +msgid "Your username:" msgstr "" #: ../gtk/parameters.ui.h:56 -msgid "Add" +msgid "Your resulting SIP address:" msgstr "" #: ../gtk/parameters.ui.h:57 -msgid "Edit" -msgstr "Editar" +msgid "Default identity" +msgstr "" #: ../gtk/parameters.ui.h:58 -msgid "Remove" -msgstr "Remover" +msgid "Wizard" +msgstr "" #: ../gtk/parameters.ui.h:59 -msgid "Proxy accounts" +msgid "Add" msgstr "" #: ../gtk/parameters.ui.h:60 -msgid "Erase all passwords" -msgstr "" +msgid "Edit" +msgstr "Editar" #: ../gtk/parameters.ui.h:61 -msgid "Privacy" -msgstr "" +msgid "Remove" +msgstr "Remover" #: ../gtk/parameters.ui.h:62 -msgid "Automatically answer when a call is received" +msgid "Proxy accounts" msgstr "" #: ../gtk/parameters.ui.h:63 -msgid "Auto-answer" +msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:64 -msgid "Manage SIP Accounts" +msgid "Privacy" msgstr "" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 -msgid "Enable" -msgstr "Ativado" +#: ../gtk/parameters.ui.h:65 +msgid "Automatically answer when a call is received" +msgstr "" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 -msgid "Disable" -msgstr "Desativar" +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" #: ../gtk/parameters.ui.h:67 -msgid "Codecs" +msgid "Auto-answer" msgstr "" #: ../gtk/parameters.ui.h:68 -msgid "0 stands for \"unlimited\"" +msgid "Manage SIP Accounts" msgstr "" -#: ../gtk/parameters.ui.h:69 -msgid "Upload speed limit in Kbit/sec:" -msgstr "" +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 +msgid "Enable" +msgstr "Ativado" -#: ../gtk/parameters.ui.h:70 -msgid "Download speed limit in Kbit/sec:" -msgstr "" +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 +msgid "Disable" +msgstr "Desativar" #: ../gtk/parameters.ui.h:71 -msgid "Enable adaptive rate control" +msgid "Codecs" msgstr "" #: ../gtk/parameters.ui.h:72 +msgid "0 stands for \"unlimited\"" +msgstr "" + +#: ../gtk/parameters.ui.h:73 +msgid "Upload speed limit in Kbit/sec:" +msgstr "" + +#: ../gtk/parameters.ui.h:74 +msgid "Download speed limit in Kbit/sec:" +msgstr "" + +#: ../gtk/parameters.ui.h:75 +msgid "Enable adaptive rate control" +msgstr "" + +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1491,10 +1499,6 @@ msgstr "" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "" @@ -1694,68 +1698,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Procurando por telefone de destino..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Não foi possível encontrar este número." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1840,100 +1844,100 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Usuário está ocupado." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Usuário está temporáriamente indisponível." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1943,11 +1947,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/ru.po b/po/ru.po index cdffa1646..a82543013 100644 --- a/po/ru.po +++ b/po/ru.po @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-28 09:22+0000\n" -"Last-Translator: AlexL \n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" +"Last-Translator: Belledonne Communications \n" "Language-Team: Russian (http://www.transifex.com/projects/p/linphone-gtk/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -94,45 +94,45 @@ msgstr "Мне" msgid "Couldn't find pixmap file: %s" msgstr "Невозможно найти графический файл: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "Вывод некоторой отладочной информации на устройство стандартного вывода во время работы." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "Путь к файлу для записи логов." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Запуск linphone с видео отключен." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Показывать только в системном лотке, не запуская главное окно." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "Адрес для звонка прямо сейчас." -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Определить рабочий каталог (относительно каталога установки, например: c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Файл конфигурации" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Запустить помощника аудио" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "Запустить самотест и выйти при успехе со статусом 0" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -140,76 +140,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s вы бы хотели быть добавленным в этот контактный лист.\nВы разрешаете ему(ей) видеть ваш статус присутствия или добавить в контактный лист?\nЕсли вы ответите Нет, эта персона будет временно в чёрном списке." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Пожалуйста, введите пароль для пользователя %s\n для реалм (рилм) %s:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Ошибка звонка" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Звонок окончен" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Ответ" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Отклонить" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Звонок приостановлен" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предложил запустить видео. Вы принимаете?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Домашняя страница" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - интернет видео телефон" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (по умолчанию)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Мы передали в %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Звуковые карты не были обнаружены на этом компьютере.\nВы не сможете отправлять или получать аудио звонки." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Свободный SIP видео-телефон" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "Привет\n" @@ -222,7 +226,7 @@ msgstr "Добавить в адресную книгу" msgid "Presence status" msgstr "Статус присутствия" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Имя" @@ -263,124 +267,124 @@ msgstr "Удалить историю чата для '%s'" msgid "Add new contact from %s directory" msgstr "Добавить новый контакт из директории '%s'" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Частота (Гц)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Статус" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "IP битрейт (КБит/сек)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Параметры" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Разрешён" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Не разрешён" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Учётная запись" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Английский" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Французский" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Шведский" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Итальянский" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Испанский" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Бразильский португальский" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Польский" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Немецкий" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Японский" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Датский" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Венгерский" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Чешский" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Китайский" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Традиционный китайский" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Норвежский" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "Иврит" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Сербский" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Вы должны перезагрузить linphone для того, чтобы языковые настройки вступили в силу." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Нет" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -423,133 +427,133 @@ msgstr[0] "Найден %i контакт" msgstr[1] "Найдено %i контакта" msgstr[2] "Найдено %i контактов" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Добро пожаловать!\nЭтот ассистент поможет вам использовать SIP аккаунт для ваших звонков." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Создать учётную запись на linphone.org" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Я уже имею учётную запись на linphone.org и только хочу использовать её" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "Я уже имею учётную запись sip и только хочу использовать её" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "Я хочу указать удалённую конфигурацию URI" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Введите ваше имя пользователя для linphone.org" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Имя пользователя:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Пароль:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Введите вашу информацию об учётной записи" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Имя пользователя*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Пароль*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Домен*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Прокси" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Обязательные поля" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Имя пользователя: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Пароль: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "Электронная почта: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Подтвердите ваш пароль: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "Информировать об обновлениях linphone" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Ошибка, учётная запись не подтверждена, имя пользователя уже используется или\nсервер недоступен. Пожалуйста, зайдите снова и попробуйте ещё раз." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Спасибо! Учётная запись успешно настроена и готова к использованию." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Пожалуйста, подтвердите вашу учётную запись, щёлкнув на ссылку, которую вы только\nчто получили по электронной почте. Затем вернитесь сюда и нажмите кнопку Далее." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "Помощник настройки учётной записи SIP" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Добро пожаловать в помощник настройки учётной записи" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Помощник настройки учётной записи" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Настроить вашу учётную запись (шаг 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Введите ваше sip имя пользователя (шаг 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Введите информацию об учётной записи (шаг 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Подтверждение (шаг 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Ошибка" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Прерывание" @@ -1186,307 +1190,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Настройки" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Установить MTU (максимально передаваемый блок):" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Отправлять DTFM как SIP-информацию" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "Разрешить IPv6" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Транспорт" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "Порт SIP/UDP" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "Случайно" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "Порт SIP/TCP" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "Аудио RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Фиксированный" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "Видео RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Тип медиа-шифрования" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Медиа-шифрование обязательно" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Тунель" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "Поля DSCP" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Сетевые протоколы и порты" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Прямое подключение к интернет" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "За NAT / брандмауэром (указать IP шлюза)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "За NAT / брандмауэром (использовать STUN)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "За NAT / брандмауэром (использовать ICE)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "За NAT / брандмауэром (использовать uPnP)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Выделенный (публичный) IP-адрес:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN сервер:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT и брандмауэр" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Настройки сети" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Мелодия звонка:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "Специальное устройство ALSA (опционально)" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Устройство захвата:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Устройство звонка:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Устройство воспроизведения:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Разрешить подавление эха" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Аудио" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Устройство для вывода видео:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Предпочтительное разрешение видео:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Метод вывода видео:" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "Показать предпросмотр с камеры" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Видео" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Настройки мультимедиа" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Эта секция определяет ваш SIP адрес, когда вы не используете учётную запись SIP" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Отображаемое имя (например: Иван Сидоров):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Ваше имя пользователя:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Ваш результирующий SIP адрес:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Идентификатор по умолчанию" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Мастер" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Добавить" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Редактировать" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Удалить" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Учётные записи" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Стереть все пароли" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Секретность" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "Автоматический ответ при получении звонка" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "Задержка перед ответом (мс)" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "Автоответ" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Управление учётными записями SIP" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Разрешить" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Выключить" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Кодеки" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 означает \"безлимитный\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Ограничение исходящего потока КБит/сек:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Ограничение скорости входящего потока КБит/сек:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Разрешить адаптивное управление скоростью" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Адаптивное управление скоростью - это технология динамического угадывания доступной пропускной способности во время звонка." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Пропускная способность" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Кодеки" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Язык" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Показать дополнительные настройки" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Уровень" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Пользовательский интерфейс" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "Адрес сервера:" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "Метод аутентификации:" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "Установка учётной записи LDAP" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Готово" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Поиск контактов в директории" @@ -1499,10 +1507,6 @@ msgstr "Добавить в мой список" msgid "Search somebody" msgstr "Поиск кого-нибудь" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Пожалуйста, подождите" @@ -1702,68 +1706,68 @@ msgstr "Конфигурирование..." msgid "Please wait while fetching configuration from server..." msgstr "Пожалуйста, подождите пока получается конфигурация с сервера..." -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Готов" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "Конфигурирование" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Поиск назначения для телефонного номера.." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Не получилось принять решение по этому номеру." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Соединение" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Невозможно позвонить" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "К сожалению, мы достигли максимального количества одновременных звонков" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "контактирует с вами" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "и спросил автоматический ответ." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Изменение параметров звонка..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Соединён." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Звонок отменён" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Невозможно приостановить звонок" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Приостановка текущего звонка..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "Идет поиск STUN..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "Сбор локальных кандидатов ICE в прогрессе..." @@ -1848,100 +1852,100 @@ msgstr "Дистанционный звонок..." msgid "Early media." msgstr "Предответное проключение." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "Звонок с %s приостановлен." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "На звонок ответил %s - на удержании." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Звонок возобновлён." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "На звонок ответил %s." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Несовместимость, проверьте кодеки или параметры безопасности..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Несовместимость медиа-параметров." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Мы возобновили." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "Мы приостановлены другой стороной." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "Звонок был дистанционно обновлён." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Звонок прерван." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Пользователь занят." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Пользователь временно недоступен." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Пользователь не хочет чтобы его беспокоили." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Звонок отклонён." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "Таймаут запроса." -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Переадресован" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Звонок не удался." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Регистрация на %s прошла успешно." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Отмена регистрации на %s завершена." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "время ожидания истекло" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Регистрация на %s не удалась: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "Сервис недоступен, повтор" @@ -1951,11 +1955,11 @@ msgstr "Сервис недоступен, повтор" msgid "Authentication token is %s" msgstr "Маркер проверки подлинности: %s" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "Параметры звонка были успешно изменены." -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/sr.po b/po/sr.po index e27cd10ae..6adc05f37 100644 --- a/po/sr.po +++ b/po/sr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Serbian (http://www.transifex.com/projects/p/linphone-gtk/language/sr/)\n" "MIME-Version: 1.0\n" @@ -90,45 +90,45 @@ msgstr "Ја" msgid "Couldn't find pixmap file: %s" msgstr "Не могу да пронађем датотеку сличице: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "бележи на стандардни излаз неке податке прочишћавања док ради." -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "путања до датотеке за уписивање дневника." -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Покреће линфон са искљученим видеом." -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Покреће се само у системској фиоци, не приказује главно сучеље." -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "адреса за позивање управо сада" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Наводи радни директоријум (треба да буде основа инсталације, нпр: „c:\\Program Files\\Linphone“)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Датотека подешавања" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Покреће помоћника звука" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "Покреће самоиспробавање и излази 0 ако је успешно" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -136,76 +136,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s жели да вас дода на списак пријатеља.\nДа ли желите да му допустите да види ваше стање присуства или да га додате на ваш списак пријатеља ?\nАко одговорите са не, ова особа ће привремено бити стављена на списак забрана." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "Унесите вашу лозинку за корисничко име %s\n на подручју %s:" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Грешка позива" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Позив је завршен" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Јави се" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Одбиј" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Позив је заустављен" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "од %s" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предлаже да започнете видео. Да ли прихватате ?" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Веза веб сајта" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Линфон — интернет телефон са снимком" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Линфон" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (основно)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "Преселили смо се на %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "Ниједна звучна картица није откривена на овом рачунару.\nНећете бити у могућности да шаљете или да примате звучне позиве." -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "Слободан СИП телефон са снимком" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -218,7 +222,7 @@ msgstr "Додајте у адресар" msgid "Presence status" msgstr "Стање присуства" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Име" @@ -259,124 +263,124 @@ msgstr "Обришите историјат ћаскања за „%s“" msgid "Add new contact from %s directory" msgstr "Додајте нови контакт из директоријума „%s“" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Проток (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Стање" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "Проток бита ИП-а (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Параметри" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Укључено" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Искључено" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Налог" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Енглески" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Француски" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Шведски" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Италијански" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Шпански" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Бразилски португалски" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Пољски" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Немачки" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Руски" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Јапански" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Холандски" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Мађарски" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Чешки" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Кинески" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Традиционални кинески" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Норвешки" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "Јеврејски" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Српски" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Треба поново да покренете линфон да би нови изабрани језик ступио у дејство." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Ништа" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "СРТП" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ЗРТП" @@ -419,133 +423,133 @@ msgstr[0] "Нашао сам %i контакт" msgstr[1] "Нашао сам %i контакта" msgstr[2] "Нашао сам %i контаката" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Добро дошли!\nОвај помоћник ће вам помоћи да користите СИП налог за ваше позиве." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "Направи налог на линфон.орг-у" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "Већ имам налог линфон.орг-а и желим да га користим" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "Већ имам сип налог и желим да га користим" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "Желим да наведем удаљену путању подешавања" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "Унесите ваше корисничко име линфон.орг-а" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Корисничко име:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Лозинка:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Унесите податке вашег налога" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Корисник*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Лозинка*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Домен*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Посредник" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Обавезна поља" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Корисник: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Лозинка: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "Ел. пошта: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Потврдите вашу лозинку: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "Обавештавај ме о ажурирањима линфона" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Грешка, налог није потврђен, корисничко име је већ у употреби или је сервер недоступан.\nВратите се назад и покушајте опет." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Хвала вам. Ваш налог је сада подешен и спреман за употребу." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "Потврдите ваш налог притиском на везу коју смо вам управо послали ел. поштом.\nЗатим се вратите овде и притисните дугме „Напред“." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "Помоћник подешавања СИП налога" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Добро дошли у помоћника подешавања налога" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Помоћник подешавања налога" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Подесите ваш налог (корак 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "Унесите ваше корисничко име сип-а (корак 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Унесите податке налога (корак 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Потврђивање (корак 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Грешка" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Завршавам" @@ -1182,307 +1186,311 @@ msgid "C" msgstr "В" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "СИП (УДП)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "СИП (ТЦП)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "СИП (ТЛС)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Подешавања" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Подеси јединицу највећег преноса:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Пошаљи ДТМФ као СИП податке" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Пренос" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "СИП/УДП прикључник" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "Насумично" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "СИП/ТЦП прикључник" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "РТП/УДП звука:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Неизмењиво" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "РТП/УДП снимка:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Врста шифровања медија" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Шифровање медија је обавезно" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Тунел" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "ДСЦП поља" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "Мрежни протокол и прикључници" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Непосредна веза на Интернет" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "Иза НАТ-а / мрежне баријере (наведите ИП мрежног пролаза)" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Иза НАТ-а / мрежне баријере (користите СТУН за решавање)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "Иза НАТ-а / мрежне баријере (користите ИЦЕ)" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "Иза НАТ-а / мрежне баријере (користите уПнП)" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Јавна ИП адреса:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Стун сервер:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "НАТ и мрежна баријера" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Мрежа" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Звук звона:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "АЛСА-ин посебни уређај (изборно):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Уређај за снимање:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Уређај за звоно:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Уређај за пуштање:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Укључи поништавање одјека" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Звук" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Улазни уређај снимка:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Жељена резолуција снимка:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Начин излаза снимка:" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "Прикажи претпреглед камерице" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Снимак" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Мултимедија" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Овај одељак одређује вашу СИП адресу када не користите СИП налог" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Ваше приказано име (нпр: Пера Перић):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Ваше корисничко име:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Ваша резултирајућа СИП адреса:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Основни идентитет" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Чаробњак" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Додај" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Уреди" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Уклони" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Посреднички налози" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Обриши све лозинке" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Приватност" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "СИП налози" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Укључи" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Искључи" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Кодеци" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 значи „неограничено“" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Ограничи брзину слања на (Kb/s):" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Ограничи брзину преузимања на (Kb/s):" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "Укључи прилагодљиво управљање протоком" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "Прилагодљиво управљање протоком је техника за променљиво погађање доступног пропусног опсега за време позива." -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Управљање пропусним опсегом" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Kодеци" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Језик" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Прикажи напредна подешавања" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Ниво" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Корисничко сучеље" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "Адреса сервера:" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "Начин потврђивања идентитета:" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "Подешавања ЛДАП налога" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "ЛДАП" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Готово" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "СИП (УДП)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "СИП (ТЦП)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "СИП (ТЛС)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Потражите пријатеље у директоријуму" @@ -1495,10 +1503,6 @@ msgstr "Додај на мој списак" msgid "Search somebody" msgstr "Потражите неког" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Линфон" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Сачекајте мало" @@ -1698,68 +1702,68 @@ msgstr "Подешавам..." msgid "Please wait while fetching configuration from server..." msgstr "Сачекајте док довучем подешавања са сервера..." -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Спреман" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "Подешавам" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Тражим одредиште телефонског броја..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Не могу да решим овај број." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Ступам у везу" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "Не могу да позовем" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Извините, достигли смо највећи број истовремених позива" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "вам се обраћа" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " и затражени само-одговор." -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "Мењам параметре позива..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Повезан сам." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Позив је прекинут" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "Не могу да зауставим позив" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "Заустављам тренутни позив..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "У току је тражење стуна..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "Прикупљање месних ИЦЕ кандидата је у току..." @@ -1844,100 +1848,100 @@ msgstr "Удаљено звоњење..." msgid "Early media." msgstr "Ранији медиј." -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "Позив са „%s“ је заустављен." -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "Позив на који је одговорио „%s“ — на чекању." -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "Позив је настављен." -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "На позив је одговорио „%s“." -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "Несагласно, проверите кодеке или безбедносна подешавања..." -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "Медијски параметри су несагласни." -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "Наставили смо." #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "Друга страна нас је паузирала." #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "Позив је освежен удаљеним." -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Позив је завршен." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Корисник је заузет." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Корисник је привремено недоступан." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Корисник не жели да буде узнемираван." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Позив је одбијен." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "Истекло је време захтева." -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Преусмерен" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Позив није успео." -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Уписивање на „%s“ је успело." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Исписивање са „%s“ је обављено." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "нема ограничења одговора" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Уписивање на „%s“ није успело: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "Услуга није доступна, поново покушавам" @@ -1947,11 +1951,11 @@ msgstr "Услуга није доступна, поново покушавам" msgid "Authentication token is %s" msgstr "Симбол потврђивања идентитета је „%s“" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/sv.po b/po/sv.po index ef23005fe..bbc77c665 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Swedish (http://www.transifex.com/projects/p/linphone-gtk/language/sv/)\n" "MIME-Version: 1.0\n" @@ -87,45 +87,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Kunde inte hitta pixmap filen: %s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "skriv loggning information under körning" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "Starta ikonifierat, visa inte huvudfönstret" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "Samtalsmottagare" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "Välj en arbetskatalog som ska vara basen för installationen, såsom C:\\Program\\Linphone" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -133,76 +133,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s skulle vilja lägga till dig till hans/hennes kontaktlista.\nVill du tillåta honom/henne att se din närvarostatus eller lägga till honom/henne till din kontaktlista?\nOm du svarar nej, personen kommer att vara bannlyst." -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Samtalet slut" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkommande samtal" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avböj" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "Webbsajt" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - en video Internet telefon" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -215,7 +219,7 @@ msgstr "" msgid "Presence status" msgstr "Närvarostatus" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Namn" @@ -256,124 +260,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "Lägg till kontakt ifrån %s katalogen" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "Frekvens (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Status" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Parametrar" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "På" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Av" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "Engelska" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "Italiensk" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "Spanska" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Portugisiska" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Polska" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Tyska" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Ryska" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japanska" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Nederländksa" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Hungerska" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Tjekiska" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Kinesiska" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du behöver starta om programmet för att det nya språket ska synas." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -415,133 +419,133 @@ msgid_plural "Found %i contacts" msgstr[0] "Hittat kontakt %i" msgstr[1] "Hittat kontakt %i" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Användarnamn:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Lösenord:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Tack. Ditt konto är nu konfigurerad och färdig att användas." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Välkommen till kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1178,307 +1182,311 @@ msgid "C" msgstr "" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Inställningar" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "Välj MTU (Maximum Transmission Unit):" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "Kicka DTMF koder som SIP info" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "Transport" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "Direkt förbindelse till Internet" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Bakom en NAT / brandvägg (använd STUN för att avgöra adressen)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Publik IP adress:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "STUN server:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT och Brandvägg" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Nätverksinställningar" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Ring signal:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "ALSA speciell enhet (tillval):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Mikrofon enhet:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Ringning enhet:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Uppspelningsenhet:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "Tillåta ekokancellering" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "Audio" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Video ingångsenhet:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Video upplösning:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "Video" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Multimedia inställningar" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "Denna sektion specificerar din SIP adress när du inte använder ett SIP konto" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "Ditt synliga namn, e.g. Kalle Karlsson:" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Ditt användarnamn:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "Din SIP adress:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "Default identitet" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Lägg till" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Editera" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Ta bort" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "Proxy konton" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Glöm alla lösenord" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "Integritet" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "Hantera SIP konton" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Möjliggör" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Inaktivera" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 står för \"utan begränsning\"" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Max upstream bandbreddshastighet i kbit/sek:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "Max downstream bandbreddshastighet i kbit/sek:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "Bandbreddskontroll" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Codecs" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "Språk" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Visa avancerade inställningar" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "Nivå" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Användarinterface" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Klar" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "Sök för kontakter i katalogen" @@ -1491,10 +1499,6 @@ msgstr "Lägg till min lista" msgid "Search somebody" msgstr "Sök efter kontakter" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Vänta" @@ -1694,68 +1698,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Redo" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "Leta efter telefonnummer för destinationen..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "Kan inte nå dett nummer." #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Kontaktar" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Kopplad" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "STUN uppslagning pågår..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1840,100 +1844,100 @@ msgstr "" msgid "Early media." msgstr "Tidig media" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Samtalet slut." -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Användare upptagen." -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "Användaren temporärt inte tillgänglig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "Användaren vill inte bli störd." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Samtalet avböjdes." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lyckades." -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lyckades." -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "Inget svar inom angiven tid" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislyckades: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1943,11 +1947,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/tr.po b/po/tr.po index 97ef267a3..e2d9c815e 100644 --- a/po/tr.po +++ b/po/tr.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Turkish (http://www.transifex.com/projects/p/linphone-gtk/language/tr/)\n" "MIME-Version: 1.0\n" @@ -88,45 +88,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "" -#: ../gtk/main.c:137 -msgid "path to a file to write logs into." -msgstr "" - #: ../gtk/main.c:138 +msgid "path to a file to write logs into." +msgstr "Günlükleri içine yazmak için bir dosya yolu" + +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "Linphonu görüntü olmadan başlat" -#: ../gtk/main.c:139 -msgid "Start only in the system tray, do not show the main interface." -msgstr "" - #: ../gtk/main.c:140 -msgid "address to call right now" -msgstr "" +msgid "Start only in the system tray, do not show the main interface." +msgstr "Sadece sistem tepsisinde başlat, ana arayüzü gösterme." #: ../gtk/main.c:141 +msgid "address to call right now" +msgstr "adres ara" + +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" -msgstr "" +msgstr "Bir çalışma dizini belirtin (kurulum temelinde olmalı,örneğin: c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "Yapılandırma dosyası" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "Ses yardımcısını çalıştır" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -134,79 +134,83 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "Çağrı yanlış" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "Çağrı sonlandırıldı" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Gelen çağrı" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Yanıt" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Reddet" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "Çağrı duraklatıldı" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "İnternet " -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - görüntülü internet telefonu" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" -msgstr "" +msgstr "Özgür bir SİP görüntülü-telefon" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" -msgstr "" +msgstr "Merhaba\n" #: ../gtk/friendlist.c:505 msgid "Add to addressbook" @@ -214,9 +218,9 @@ msgstr "Adres defterine ekle" #: ../gtk/friendlist.c:691 msgid "Presence status" -msgstr "" +msgstr "durum bilgisi" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Ad" @@ -257,124 +261,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" -msgstr "" +msgstr "Hız (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "Durum" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" -msgstr "" +msgstr "İP Bit hızı (kbit/s)" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "Değişkenler" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "Etkin" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "Devre dışı" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "Hesap" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "İngilizce" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "Fransızca" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "İsveççe" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "İtalyanca" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "İspanyolca" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "Brezilya Portekizcesi" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "Lehçe" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "Almanca" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "Rusca" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "Japonca" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "Flemenkçe" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "Macarca" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "Çekce" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "Çince" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "Geleneksel Çince" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "Norveççe" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "İbranice" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "Sırpça" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Yeni dil seçiminizin etkili olabilmesi için linfonu yeniden başlatmalısınız." -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "Hiçbiri" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "SRTP (Güvenli Gerçek Zamanlı Aktarım Protokolü)" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "DTLS" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "ZRTP" @@ -416,133 +420,133 @@ msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "Hoşgeldiniz!\nBu yardımcı,çağrılarınız için bir SIP hesabı kullanmanıza yardım edecek." -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "linphone.org'da bir hesap oluştur" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "linphone.org kullanıcı adınızı girin" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "Kullanıcı adı:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "Parola:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "Hesap bilgilerinizi girin" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "Kallanıcı adı*" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "Parola*" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "Alan adı*" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "Vekil sunucu" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "(*) Zorunlu alanlar" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "Kullanıcı adı: (*)" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "Parola: (*)" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "E-posta: (*)" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "Parolanızı onaylayın: (*)" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "linphone güncellemeleri hakkında beni bilgilendir" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "Hata,hesap geçersiz,kullanıcı adı kullanılıyor veya sunucuya erişilemiyor.\nLütfen geri dönün ve tekrar deneyin." -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "Teşekkürler. Hesabınız yapılandırıldı ve kullanıma hazır." -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." -msgstr "" +msgstr "Lütfen size e-posta yoluyla gönderdiğimiz bağlantıyı tıklayarak hesabınızı doğrulayın.\nSonra buraya geri dönün ve İleri düğmesine basın." -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "SİP hesabı yapılandırma yardımcısı" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "Hesap açma yardımcısına hoşgeldiniz" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "Hesap açma yardımcısı" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "Hesabınızı yapılandırın (adım 1/1)" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "sip kullanıcı adınızı girin (adım 1/1)" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "Hesap bilgilerini girin (adım 1/2)" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "Doğrulama (adım 2/2)" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "Hata" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "Sonlandırma" @@ -570,7 +574,7 @@ msgstr "ICE başarısız" #: ../gtk/incall_view.c:225 msgid "ICE in progress" -msgstr "" +msgstr "ICE sürüyor" #: ../gtk/incall_view.c:227 msgid "Going through one or more NATs" @@ -627,7 +631,7 @@ msgstr "" #: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235 msgid "Hang up" -msgstr "" +msgstr "Telefonu kapatma" #: ../gtk/incall_view.c:511 msgid "Calling..." @@ -667,11 +671,11 @@ msgstr "kullanılamaz" #: ../gtk/incall_view.c:679 msgid "Secured by SRTP" -msgstr "" +msgstr "SRTP güvencesi altında" #: ../gtk/incall_view.c:685 msgid "Secured by DTLS" -msgstr "" +msgstr "DLTS güvencesi altında" #: ../gtk/incall_view.c:691 #, c-format @@ -704,15 +708,15 @@ msgstr "" #: ../gtk/incall_view.c:831 msgid "Transfer in progress" -msgstr "" +msgstr "Aktarım sürüyor" #: ../gtk/incall_view.c:834 msgid "Transfer done." -msgstr "" +msgstr "Aktarım tamam" #: ../gtk/incall_view.c:837 msgid "Transfer failed." -msgstr "" +msgstr "Aktarım başarısız" #: ../gtk/incall_view.c:881 msgid "Resume" @@ -766,7 +770,7 @@ msgstr "Çok yüksek" #: ../gtk/audio_assistant.c:183 msgid "Did you hear three beeps ?" -msgstr "" +msgstr "Üç bip sesi duydun mu?" #: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297 msgid "Sound preferences not found " @@ -804,7 +808,7 @@ msgstr "Oynatma aygıtı" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" -msgstr "" +msgstr "Üç bip sesi çal" #: ../gtk/audio_assistant.c:403 msgid "Press the record button and say some words" @@ -812,15 +816,15 @@ msgstr "Kayıt tuşuna bas ve bazı kelimeler söyle" #: ../gtk/audio_assistant.c:404 msgid "Listen to your record voice" -msgstr "" +msgstr "Kaydettiğin sesi dinle" #: ../gtk/audio_assistant.c:405 msgid "Record" -msgstr "" +msgstr "Kayıt" #: ../gtk/audio_assistant.c:406 msgid "Play" -msgstr "" +msgstr "Çalma" #: ../gtk/audio_assistant.c:433 msgid "Let's start Linphone now" @@ -864,7 +868,7 @@ msgstr "" #: ../gtk/main.ui.h:8 msgid "Video" -msgstr "" +msgstr "Görüntü" #: ../gtk/main.ui.h:10 msgid "Mute" @@ -872,7 +876,7 @@ msgstr "Sessiz" #: ../gtk/main.ui.h:11 msgid "Transfer" -msgstr "" +msgstr "Aktarım" #: ../gtk/main.ui.h:14 msgid "In call" @@ -956,7 +960,7 @@ msgstr "Yeni bir arama başlat" #: ../gtk/main.ui.h:35 msgid "Contacts" -msgstr "" +msgstr "Bağlantılar" #: ../gtk/main.ui.h:36 msgid "Search" @@ -1004,7 +1008,7 @@ msgstr "" #: ../gtk/main.ui.h:47 msgid "Welcome!" -msgstr "" +msgstr "Hoşgeldiniz!" #: ../gtk/about.ui.h:1 msgid "About Linphone" @@ -1012,11 +1016,11 @@ msgstr "Linphone Hakkında" #: ../gtk/about.ui.h:2 msgid "(C) Belledonne Communications, 2010\n" -msgstr "" +msgstr "(C) Belledonne Communications, 2010\n\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "" +msgstr "Standart SİP (rfc3261) protokolü kullanan görüntülü internet telefonu." #: ../gtk/about.ui.h:5 msgid "" @@ -1048,7 +1052,7 @@ msgstr "" #: ../gtk/contact.ui.h:5 msgid "Contact information" -msgstr "" +msgstr "Bağlantı bilgisi" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" @@ -1080,7 +1084,7 @@ msgstr "Geri arama" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" -msgstr "" +msgstr "Linphone - Bir SİP hesabı yapılandır" #: ../gtk/sip_account.ui.h:2 msgid "Your SIP identity:" @@ -1120,7 +1124,7 @@ msgstr "" #: ../gtk/sip_account.ui.h:11 msgid "Transport" -msgstr "" +msgstr "Taşıma" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1132,11 +1136,11 @@ msgstr "" #: ../gtk/sip_account.ui.h:14 msgid "Enable AVPF" -msgstr "" +msgstr "AVPF'yi etkinleştir" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" -msgstr "" +msgstr "Bir SİP hesabı yapılandır" #: ../gtk/parameters.ui.h:1 msgid "anonymous" @@ -1156,7 +1160,7 @@ msgstr "öntanımlı ses kartı" #: ../gtk/parameters.ui.h:5 msgid "a sound card" -msgstr "" +msgstr "Ses kartı" #: ../gtk/parameters.ui.h:6 msgid "default camera" @@ -1179,307 +1183,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "Ayarlar" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "SIP/UDP bağlantı noktası" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "Rastgele" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "SIP/TCP bağlantı noktası" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "Sabitlenmiş" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "Ortam şifreleme türü" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "Ortam şifrelemesi zorunludur" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "Tünel" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "İnternete doğrudan bağlantı" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "Ortak İP adresi:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stun sunucusu:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "Ağ ayarları" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "Zil sesi:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" -msgstr "" +msgstr "ALSA özel aygıt (seçmeli)" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "Görüntü yakalama aygıtı" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "Ses çalma aygıtı:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "Oynatma aygıtı:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" -msgstr "" +msgstr "Ses" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "Görüntü aygıtı:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "Tercih edilen görüntü çözünürlüğü:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "Görüntü çıkış yöntemi:" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "Kamera önizlemesi göster" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" -msgstr "" +msgstr "Görüntü" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "Çokluortam ayarları" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" -msgstr "" +msgstr "Görünecek adınız (örneğin: Faradunda Marti)" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "Kullanıcı adınız:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" -msgstr "" +msgstr "Öntanımlı kimlik" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "Yardımcı" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "Ekle" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "Düzenle" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "Kaldır" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "Bütün parolaları sil" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" -msgstr "" +msgstr "Gizlilik" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 -msgid "Auto-answer" +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:67 +msgid "Auto-answer" +msgstr "Otomatik yanıt" + +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "SİP Hesaplarını Yönet" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "Etkinleştirme" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "Devre dışı" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" -msgstr "" +msgstr "Çözücüler" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "Gönderim hız sınırı Kbit/saniye:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "İndirme hız sınırı Kbit/saniye:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" -msgstr "" +msgstr "Bantgenişliği denetimi" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "Çözücüler" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" -msgstr "" +msgstr "Dil" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "Gelişmiş ayarları göster" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" -msgstr "" +msgstr "Aşama" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "Kullanıcı arayüzü" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "Sunucu adresi:" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "Kimlik doğrulama yöntemi:" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" -msgstr "" +msgstr "LDAP Hesap ayarı" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "Tamam" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "SIP (UDP)" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "SIP (TCP)" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "SIP (TLS)" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "" @@ -1492,10 +1500,6 @@ msgstr "Listeme ekle" msgid "Search somebody" msgstr "" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Lütfen bekleyin" @@ -1538,7 +1542,7 @@ msgstr "" #: ../gtk/call_statistics.ui.h:5 msgid "Audio Media connectivity" -msgstr "" +msgstr "Ses Ortamı bağlanırlığı" #: ../gtk/call_statistics.ui.h:6 msgid "Video IP bandwidth usage" @@ -1546,11 +1550,11 @@ msgstr "" #: ../gtk/call_statistics.ui.h:7 msgid "Video Media connectivity" -msgstr "" +msgstr "Görüntü Ortamı bağlanırlığı" #: ../gtk/call_statistics.ui.h:8 msgid "Round trip time" -msgstr "" +msgstr "Sinyal gidiş-dönüş süresi" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" @@ -1695,68 +1699,68 @@ msgstr "Yapılandırılıyor..." msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "Hazır" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "Yapılandırılıyor" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "Bağlanıyor" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "Bağlandı." -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "Çağrı iptal edildi" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1770,7 +1774,7 @@ msgstr "Meşgul" #: ../coreapi/friend.c:39 msgid "Be right back" -msgstr "" +msgstr "Hemen döneceğim" #: ../coreapi/friend.c:42 msgid "Away" @@ -1786,7 +1790,7 @@ msgstr "Yemekteyim" #: ../coreapi/friend.c:51 msgid "Do not disturb" -msgstr "" +msgstr "Rahatsız etmeyin" #: ../coreapi/friend.c:54 msgid "Moved" @@ -1794,7 +1798,7 @@ msgstr "Taşındı" #: ../coreapi/friend.c:57 msgid "Using another messaging service" -msgstr "" +msgstr "Diğer mesaj servisi kullanılıyor" #: ../coreapi/friend.c:60 msgid "Offline" @@ -1841,102 +1845,102 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "Çağrı sonlandırıldı" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "Kullanıcı meşgul" -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." -msgstr "" +msgstr "Kullanıcı rahatsız edilmek istemiyor." -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "Çağrı reddedildi." -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "İstek zamanaşımına uğradı." -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "Yeniden yönlendirildi" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "Arama başarısız" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" -msgstr "" +msgstr "Servis kullanımdışı, tekrar deneyin" #. if encryption is DTLS, no status to be displayed #: ../coreapi/linphonecall.c:180 @@ -1944,11 +1948,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -1969,7 +1973,7 @@ msgstr "Yanıtsız" #: ../coreapi/call_log.c:218 msgid "unknown" -msgstr "" +msgstr "bilinmeyen" #: ../coreapi/call_log.c:220 #, c-format diff --git a/po/zh_CN.po b/po/zh_CN.po index 2dfc0f91a..00322bce9 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Chinese (China) (http://www.transifex.com/projects/p/linphone-gtk/language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -85,45 +85,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "无法打开位图文件:%s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "运行时向标准输出记录调试信息。" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "启动到系统托盘,不显示主界面。" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "现在呼叫的地址" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "指定工作目录(应为安装目录例如 C:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -131,76 +131,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s 想加您为联系人。\n您是否允许他看到您的在线状态或者将它加为您的联系人允许?\n如果您回答否,则会将该人临时性的放入黑名单" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "呼叫结束" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "呼入" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒绝" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "网站" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - 互联网视频电话" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (默认)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "未在此计算机上检测到声卡。\n您无法发送或接收音频呼叫。" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "免费的 SIP 视频电话" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -213,7 +217,7 @@ msgstr "" msgid "Presence status" msgstr "在线状态" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "名称" @@ -254,124 +258,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "从 %s 目录增加联系人 " -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "采样率(Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "状态" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "参数" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "启用" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "禁用" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "帐户" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "英语" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "法语" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "瑞典语" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "意大利语" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "西班牙语" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "巴西葡萄牙语" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "波兰语" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "德语" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "俄语" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "日语" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "荷兰语" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "匈牙利语" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "捷克语" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重启 linphone 以使语言选择生效。" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -412,133 +416,133 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "找到 %i 联系方式" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "用户名:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "密码:" -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "谢谢,您的帐户已经配置完毕,可以使用。" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "欢迎使用帐户设置向导" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "帐户设置向导" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1175,307 +1179,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "设置" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "设置最大传输单元(MTU):" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "以 SIP 消息发送 DTMF" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "传输协议" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "音频 RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "视频 RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "直接连接到互联网" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "在 NAT 或防火墙后(使用 STUN 解决)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "公网 IP 地址:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stun 服务器:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT 及防火墙" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "网络设置" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "铃声文件:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "ALSA 特殊设备(可选):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "录音设备:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "响铃设备:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "回放设备:" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "启用回声抑制" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "音频" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "视频输入设备:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "视频分辨率:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "视频" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "音视频设置" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "该段在您不使用SIP帐户时的SIP地址" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "您的显示名:" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "您的用户名:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "您的 SIP 地址结果:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "默认帐户" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "添加" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "编辑" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "移除" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "代理帐户" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "清除所有密码" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "隐私" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "SIP 帐户管理" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "启用" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "禁用" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "编解码器" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 表示 “没有限制”" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "上传速率限制 kbit/s:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "下载速率限制 kbit/s:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "带宽控制" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "编解码器" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "语言" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "显示高级设置" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "级别" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "用户界面" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "完成" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "查找联系人" @@ -1488,10 +1496,6 @@ msgstr "添加为联系人" msgid "Search somebody" msgstr "找人" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "请稍候" @@ -1691,68 +1695,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "就绪" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "查询电话号码目的地..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "该号码无法解析。" #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "联系中" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "正在联系您" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr " 并询问了自动回答。" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "已连接。" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "正在进行 Stun 查找..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1837,100 +1841,100 @@ msgstr "" msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "通话结束。" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "被叫正忙。" -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "您呼叫的用户暂时无法接通。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "用户已开启免打扰功能。" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "呼叫被拒绝。" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "已重定向" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "呼叫失败。" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "成功注册到 %s" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "已在 %s 解除注册。" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "没有响应,超时" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "注册到 %s 失败: %s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1940,11 +1944,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/po/zh_TW.po b/po/zh_TW.po index fcc1a2ea2..0e5d4080f 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-27 14:40+0100\n" -"PO-Revision-Date: 2015-03-27 13:40+0000\n" +"POT-Creation-Date: 2015-04-30 10:13+0200\n" +"PO-Revision-Date: 2015-04-30 08:13+0000\n" "Last-Translator: Belledonne Communications \n" "Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/linphone-gtk/language/zh_TW/)\n" "MIME-Version: 1.0\n" @@ -85,45 +85,45 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "找不到 pixmap 檔:%s" -#: ../gtk/main.c:136 +#: ../gtk/main.c:137 msgid "log to stdout some debug information while running." msgstr "執行時將一些除錯資訊記錄到標準輸出。" -#: ../gtk/main.c:137 +#: ../gtk/main.c:138 msgid "path to a file to write logs into." msgstr "" -#: ../gtk/main.c:138 +#: ../gtk/main.c:139 msgid "Start linphone with video disabled." msgstr "" -#: ../gtk/main.c:139 +#: ../gtk/main.c:140 msgid "Start only in the system tray, do not show the main interface." msgstr "只在系統匣啟動,不要顯示主要介面。" -#: ../gtk/main.c:140 +#: ../gtk/main.c:141 msgid "address to call right now" msgstr "現在要打電話的位址" -#: ../gtk/main.c:141 +#: ../gtk/main.c:142 msgid "" "Specifiy a working directory (should be the base of the installation, eg: " "c:\\Program Files\\Linphone)" msgstr "指定一個工作目錄(應該為安裝的根目錄,例如:c:\\Program Files\\Linphone)" -#: ../gtk/main.c:142 +#: ../gtk/main.c:143 msgid "Configuration file" msgstr "" -#: ../gtk/main.c:143 +#: ../gtk/main.c:144 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:144 +#: ../gtk/main.c:145 msgid "Run self test and exit 0 if succeed" msgstr "" -#: ../gtk/main.c:1059 +#: ../gtk/main.c:1070 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -131,76 +131,80 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "%s 想要加您加入他的連絡人清單。\n您是否要允許他看見您的上線狀態或將他加入您的連絡人清單?\n如果您回答否,這個人會被暫時列入黑名單。" -#: ../gtk/main.c:1136 +#: ../gtk/main.c:1147 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1257 +#: ../gtk/main.c:1268 msgid "Call error" msgstr "" -#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826 +#: ../gtk/main.c:1271 ../coreapi/linphonecore.c:3846 msgid "Call ended" msgstr "通話已結束" -#: ../gtk/main.c:1263 ../coreapi/call_log.c:221 +#: ../gtk/main.c:1274 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "來電" -#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1276 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "接聽" -#: ../gtk/main.c:1267 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1278 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒接" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 msgid "Call paused" msgstr "" -#: ../gtk/main.c:1273 +#: ../gtk/main.c:1284 #, c-format msgid "by %s" msgstr "" -#: ../gtk/main.c:1343 +#: ../gtk/main.c:1354 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1505 +#: ../gtk/main.c:1509 msgid "Website link" msgstr "網站連結" -#: ../gtk/main.c:1554 -msgid "Linphone - a video internet phone" -msgstr "Linphone - 網路視訊電話" +#: ../gtk/main.c:1568 ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "Linphone" -#: ../gtk/main.c:1646 +#: ../gtk/main.c:1569 +msgid "A video internet phone" +msgstr "" + +#: ../gtk/main.c:1629 #, c-format msgid "%s (Default)" msgstr "%s (預設值)" -#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057 +#: ../gtk/main.c:1962 ../coreapi/callbacks.c:1063 #, c-format msgid "We are transferred to %s" msgstr "我們被轉接到 %s" -#: ../gtk/main.c:1988 +#: ../gtk/main.c:1972 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "在這臺電腦中偵測不到音效卡。\n您將無法傳送或接收語音電話。" -#: ../gtk/main.c:2136 +#: ../gtk/main.c:2117 msgid "A free SIP video-phone" msgstr "自由的 SIP 視訊電話" -#: ../gtk/main.c:2241 +#: ../gtk/main.c:2221 #, c-format msgid "Hello\n" msgstr "" @@ -213,7 +217,7 @@ msgstr "" msgid "Presence status" msgstr "上線狀態" -#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:569 ../gtk/contact.ui.h:1 msgid "Name" msgstr "名稱" @@ -254,124 +258,124 @@ msgstr "" msgid "Add new contact from %s directory" msgstr "從 %s 目錄加入新的連絡人" -#: ../gtk/propertybox.c:558 +#: ../gtk/propertybox.c:575 msgid "Rate (Hz)" msgstr "頻率 (Hz)" -#: ../gtk/propertybox.c:564 +#: ../gtk/propertybox.c:581 msgid "Status" msgstr "狀態" -#: ../gtk/propertybox.c:570 +#: ../gtk/propertybox.c:587 msgid "IP Bitrate (kbit/s)" msgstr "" -#: ../gtk/propertybox.c:577 +#: ../gtk/propertybox.c:596 msgid "Parameters" msgstr "參數" -#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +#: ../gtk/propertybox.c:639 ../gtk/propertybox.c:782 msgid "Enabled" msgstr "已啟用" -#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17 +#: ../gtk/propertybox.c:641 ../gtk/propertybox.c:782 ../gtk/parameters.ui.h:20 msgid "Disabled" msgstr "已停用" -#: ../gtk/propertybox.c:809 +#: ../gtk/propertybox.c:828 msgid "Account" msgstr "帳號" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1091 msgid "English" msgstr "英語" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1092 msgid "French" msgstr "法語" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1093 msgid "Swedish" msgstr "瑞典語" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1094 msgid "Italian" msgstr "義大利語" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1095 msgid "Spanish" msgstr "西班牙語" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1096 msgid "Brazilian Portugese" msgstr "巴西葡萄牙語" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1097 msgid "Polish" msgstr "波蘭語" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1098 msgid "German" msgstr "德語" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1099 msgid "Russian" msgstr "俄語" -#: ../gtk/propertybox.c:1081 +#: ../gtk/propertybox.c:1100 msgid "Japanese" msgstr "日語" -#: ../gtk/propertybox.c:1082 +#: ../gtk/propertybox.c:1101 msgid "Dutch" msgstr "荷蘭語" -#: ../gtk/propertybox.c:1083 +#: ../gtk/propertybox.c:1102 msgid "Hungarian" msgstr "匈牙利語" -#: ../gtk/propertybox.c:1084 +#: ../gtk/propertybox.c:1103 msgid "Czech" msgstr "捷克語" -#: ../gtk/propertybox.c:1085 +#: ../gtk/propertybox.c:1104 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1086 +#: ../gtk/propertybox.c:1105 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1087 +#: ../gtk/propertybox.c:1106 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1088 +#: ../gtk/propertybox.c:1107 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1089 +#: ../gtk/propertybox.c:1108 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1156 +#: ../gtk/propertybox.c:1175 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重新啟動 linphone 才能讓新選擇的語言生效。" -#: ../gtk/propertybox.c:1236 +#: ../gtk/propertybox.c:1255 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1240 +#: ../gtk/propertybox.c:1259 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1246 +#: ../gtk/propertybox.c:1265 msgid "DTLS" msgstr "" -#: ../gtk/propertybox.c:1253 +#: ../gtk/propertybox.c:1272 msgid "ZRTP" msgstr "" @@ -412,133 +416,133 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "找不到 %i 個連絡人" -#: ../gtk/setupwizard.c:34 +#: ../gtk/setupwizard.c:32 msgid "" "Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -#: ../gtk/setupwizard.c:43 +#: ../gtk/setupwizard.c:41 msgid "Create an account on linphone.org" msgstr "" -#: ../gtk/setupwizard.c:44 +#: ../gtk/setupwizard.c:42 msgid "I have already a linphone.org account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:45 +#: ../gtk/setupwizard.c:43 msgid "I have already a sip account and I just want to use it" msgstr "" -#: ../gtk/setupwizard.c:46 +#: ../gtk/setupwizard.c:44 msgid "I want to specify a remote configuration URI" msgstr "" -#: ../gtk/setupwizard.c:89 +#: ../gtk/setupwizard.c:87 msgid "Enter your linphone.org username" msgstr "" -#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4 +#: ../gtk/setupwizard.c:100 ../gtk/parameters.ui.h:85 ../gtk/ldap.ui.h:4 msgid "Username:" msgstr "使用者名稱:" -#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +#: ../gtk/setupwizard.c:102 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 msgid "Password:" msgstr "密碼: " -#: ../gtk/setupwizard.c:124 +#: ../gtk/setupwizard.c:122 msgid "Enter your account informations" msgstr "" -#: ../gtk/setupwizard.c:140 +#: ../gtk/setupwizard.c:138 msgid "Username*" msgstr "" -#: ../gtk/setupwizard.c:141 +#: ../gtk/setupwizard.c:139 msgid "Password*" msgstr "" -#: ../gtk/setupwizard.c:144 +#: ../gtk/setupwizard.c:142 msgid "Domain*" msgstr "" -#: ../gtk/setupwizard.c:145 +#: ../gtk/setupwizard.c:143 msgid "Proxy" msgstr "" -#: ../gtk/setupwizard.c:317 +#: ../gtk/setupwizard.c:322 msgid "(*) Required fields" msgstr "" -#: ../gtk/setupwizard.c:318 +#: ../gtk/setupwizard.c:323 msgid "Username: (*)" msgstr "" -#: ../gtk/setupwizard.c:320 +#: ../gtk/setupwizard.c:325 msgid "Password: (*)" msgstr "" -#: ../gtk/setupwizard.c:322 +#: ../gtk/setupwizard.c:327 msgid "Email: (*)" msgstr "" -#: ../gtk/setupwizard.c:324 +#: ../gtk/setupwizard.c:329 msgid "Confirm your password: (*)" msgstr "" -#: ../gtk/setupwizard.c:338 +#: ../gtk/setupwizard.c:343 msgid "Keep me informed with linphone updates" msgstr "" -#: ../gtk/setupwizard.c:394 +#: ../gtk/setupwizard.c:399 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" -#: ../gtk/setupwizard.c:405 +#: ../gtk/setupwizard.c:410 msgid "Thank you. Your account is now configured and ready for use." msgstr "謝謝您。您的帳號已設定完成並且可以使用。" -#: ../gtk/setupwizard.c:413 +#: ../gtk/setupwizard.c:418 msgid "" "Please validate your account by clicking on the link we just sent you by email.\n" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:602 +#: ../gtk/setupwizard.c:609 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:620 +#: ../gtk/setupwizard.c:629 msgid "Welcome to the account setup assistant" msgstr "歡迎使用帳號設定助理" -#: ../gtk/setupwizard.c:625 +#: ../gtk/setupwizard.c:634 msgid "Account setup assistant" msgstr "帳號設定助理" -#: ../gtk/setupwizard.c:631 +#: ../gtk/setupwizard.c:640 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:636 +#: ../gtk/setupwizard.c:645 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:640 +#: ../gtk/setupwizard.c:649 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:649 +#: ../gtk/setupwizard.c:658 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:654 +#: ../gtk/setupwizard.c:663 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:534 +#: ../gtk/setupwizard.c:667 ../gtk/audio_assistant.c:534 msgid "Terminating" msgstr "" @@ -1175,307 +1179,311 @@ msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "" + +#: ../gtk/parameters.ui.h:14 msgid "Settings" msgstr "設定值" -#: ../gtk/parameters.ui.h:12 +#: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "設定最大傳輸單位:" -#: ../gtk/parameters.ui.h:13 +#: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" msgstr "傳送 DTMFs 為 SIP 資訊" -#: ../gtk/parameters.ui.h:14 +#: ../gtk/parameters.ui.h:17 msgid "Allow IPv6" msgstr "" -#: ../gtk/parameters.ui.h:15 +#: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "傳輸" -#: ../gtk/parameters.ui.h:16 +#: ../gtk/parameters.ui.h:19 msgid "SIP/UDP port" msgstr "" -#: ../gtk/parameters.ui.h:18 +#: ../gtk/parameters.ui.h:21 msgid "Random" msgstr "" -#: ../gtk/parameters.ui.h:19 +#: ../gtk/parameters.ui.h:22 msgid "SIP/TCP port" msgstr "" -#: ../gtk/parameters.ui.h:20 +#: ../gtk/parameters.ui.h:23 msgid "Audio RTP/UDP:" msgstr "音效 RTP/UDP:" -#: ../gtk/parameters.ui.h:21 +#: ../gtk/parameters.ui.h:24 msgid "Fixed" msgstr "" -#: ../gtk/parameters.ui.h:22 +#: ../gtk/parameters.ui.h:25 msgid "Video RTP/UDP:" msgstr "視訊 RTP/UDP:" -#: ../gtk/parameters.ui.h:23 +#: ../gtk/parameters.ui.h:26 msgid "Media encryption type" msgstr "" -#: ../gtk/parameters.ui.h:24 +#: ../gtk/parameters.ui.h:27 msgid "Media encryption is mandatory" msgstr "" -#: ../gtk/parameters.ui.h:25 +#: ../gtk/parameters.ui.h:28 msgid "Tunnel" msgstr "" -#: ../gtk/parameters.ui.h:26 +#: ../gtk/parameters.ui.h:29 msgid "DSCP fields" msgstr "" -#: ../gtk/parameters.ui.h:27 +#: ../gtk/parameters.ui.h:30 msgid "Network protocol and ports" msgstr "" -#: ../gtk/parameters.ui.h:28 +#: ../gtk/parameters.ui.h:31 msgid "Direct connection to the Internet" msgstr "直接連線到網際網路" -#: ../gtk/parameters.ui.h:29 +#: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (specify gateway IP )" msgstr "" -#: ../gtk/parameters.ui.h:30 +#: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)" -#: ../gtk/parameters.ui.h:31 +#: ../gtk/parameters.ui.h:34 msgid "Behind NAT / Firewall (use ICE)" msgstr "" -#: ../gtk/parameters.ui.h:32 +#: ../gtk/parameters.ui.h:35 msgid "Behind NAT / Firewall (use uPnP)" msgstr "" -#: ../gtk/parameters.ui.h:33 +#: ../gtk/parameters.ui.h:36 msgid "Public IP address:" msgstr "公共 IP 地址:" -#: ../gtk/parameters.ui.h:34 +#: ../gtk/parameters.ui.h:37 msgid "Stun server:" msgstr "Stun 伺服器:" -#: ../gtk/parameters.ui.h:35 +#: ../gtk/parameters.ui.h:38 msgid "NAT and Firewall" msgstr "NAT 與防火牆" -#: ../gtk/parameters.ui.h:36 +#: ../gtk/parameters.ui.h:39 msgid "Network settings" msgstr "網路設定值" -#: ../gtk/parameters.ui.h:37 +#: ../gtk/parameters.ui.h:40 msgid "Ring sound:" msgstr "鈴聲音效:" -#: ../gtk/parameters.ui.h:38 +#: ../gtk/parameters.ui.h:41 msgid "ALSA special device (optional):" msgstr "ALSA 特殊裝置 (選擇性):" -#: ../gtk/parameters.ui.h:39 +#: ../gtk/parameters.ui.h:42 msgid "Capture device:" msgstr "捕捉裝置:" -#: ../gtk/parameters.ui.h:40 +#: ../gtk/parameters.ui.h:43 msgid "Ring device:" msgstr "響鈴裝置:" -#: ../gtk/parameters.ui.h:41 +#: ../gtk/parameters.ui.h:44 msgid "Playback device:" msgstr "播放裝置" -#: ../gtk/parameters.ui.h:42 +#: ../gtk/parameters.ui.h:45 msgid "Enable echo cancellation" msgstr "啟用回音消除" -#: ../gtk/parameters.ui.h:43 +#: ../gtk/parameters.ui.h:46 msgid "Audio" msgstr "音效" -#: ../gtk/parameters.ui.h:44 +#: ../gtk/parameters.ui.h:47 msgid "Video input device:" msgstr "視訊輸入裝置:" -#: ../gtk/parameters.ui.h:45 +#: ../gtk/parameters.ui.h:48 msgid "Prefered video resolution:" msgstr "偏好的視訊解析度:" -#: ../gtk/parameters.ui.h:46 +#: ../gtk/parameters.ui.h:49 msgid "Video output method:" msgstr "" -#: ../gtk/parameters.ui.h:47 +#: ../gtk/parameters.ui.h:50 msgid "Show camera preview" msgstr "" -#: ../gtk/parameters.ui.h:48 +#: ../gtk/parameters.ui.h:51 msgid "Video" msgstr "視訊" -#: ../gtk/parameters.ui.h:49 +#: ../gtk/parameters.ui.h:52 msgid "Multimedia settings" msgstr "多媒體設定值" -#: ../gtk/parameters.ui.h:50 +#: ../gtk/parameters.ui.h:53 msgid "This section defines your SIP address when not using a SIP account" msgstr "這一區在不使用 SIP 帳號時定義您的 SIP 位址" -#: ../gtk/parameters.ui.h:51 +#: ../gtk/parameters.ui.h:54 msgid "Your display name (eg: John Doe):" msgstr "您的顯示名稱 (例如: John Doe):" -#: ../gtk/parameters.ui.h:52 +#: ../gtk/parameters.ui.h:55 msgid "Your username:" msgstr "您的使用者名稱:" -#: ../gtk/parameters.ui.h:53 +#: ../gtk/parameters.ui.h:56 msgid "Your resulting SIP address:" msgstr "您組成的 SIP 位址:" -#: ../gtk/parameters.ui.h:54 +#: ../gtk/parameters.ui.h:57 msgid "Default identity" msgstr "預設身分識別" -#: ../gtk/parameters.ui.h:55 +#: ../gtk/parameters.ui.h:58 msgid "Wizard" msgstr "" -#: ../gtk/parameters.ui.h:56 +#: ../gtk/parameters.ui.h:59 msgid "Add" msgstr "加入" -#: ../gtk/parameters.ui.h:57 +#: ../gtk/parameters.ui.h:60 msgid "Edit" msgstr "編輯" -#: ../gtk/parameters.ui.h:58 +#: ../gtk/parameters.ui.h:61 msgid "Remove" msgstr "移除" -#: ../gtk/parameters.ui.h:59 +#: ../gtk/parameters.ui.h:62 msgid "Proxy accounts" msgstr "代理伺服器帳號" -#: ../gtk/parameters.ui.h:60 +#: ../gtk/parameters.ui.h:63 msgid "Erase all passwords" msgstr "消除所有的密碼" -#: ../gtk/parameters.ui.h:61 +#: ../gtk/parameters.ui.h:64 msgid "Privacy" msgstr "隱私" -#: ../gtk/parameters.ui.h:62 +#: ../gtk/parameters.ui.h:65 msgid "Automatically answer when a call is received" msgstr "" -#: ../gtk/parameters.ui.h:63 +#: ../gtk/parameters.ui.h:66 +msgid "Delay before answering (ms)" +msgstr "" + +#: ../gtk/parameters.ui.h:67 msgid "Auto-answer" msgstr "" -#: ../gtk/parameters.ui.h:64 +#: ../gtk/parameters.ui.h:68 msgid "Manage SIP Accounts" msgstr "管理 SIP 帳號" -#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4 +#: ../gtk/parameters.ui.h:69 ../gtk/tunnel_config.ui.h:4 msgid "Enable" msgstr "啟用" -#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5 +#: ../gtk/parameters.ui.h:70 ../gtk/tunnel_config.ui.h:5 msgid "Disable" msgstr "停用" -#: ../gtk/parameters.ui.h:67 +#: ../gtk/parameters.ui.h:71 msgid "Codecs" msgstr "編碼解碼器" -#: ../gtk/parameters.ui.h:68 +#: ../gtk/parameters.ui.h:72 msgid "0 stands for \"unlimited\"" msgstr "0 表示「不限制」" -#: ../gtk/parameters.ui.h:69 +#: ../gtk/parameters.ui.h:73 msgid "Upload speed limit in Kbit/sec:" msgstr "上傳速度限制於 Kbit/sec:" -#: ../gtk/parameters.ui.h:70 +#: ../gtk/parameters.ui.h:74 msgid "Download speed limit in Kbit/sec:" msgstr "下載速度限制於 Kbit/sec:" -#: ../gtk/parameters.ui.h:71 +#: ../gtk/parameters.ui.h:75 msgid "Enable adaptive rate control" msgstr "" -#: ../gtk/parameters.ui.h:72 +#: ../gtk/parameters.ui.h:76 msgid "" "Adaptive rate control is a technique to dynamically guess the available " "bandwidth during a call." msgstr "" -#: ../gtk/parameters.ui.h:73 +#: ../gtk/parameters.ui.h:77 msgid "Bandwidth control" msgstr "頻寬控制" -#: ../gtk/parameters.ui.h:74 +#: ../gtk/parameters.ui.h:78 msgid "Codecs" msgstr "編碼解碼器" -#: ../gtk/parameters.ui.h:75 +#: ../gtk/parameters.ui.h:79 msgid "Language" msgstr "語言" -#: ../gtk/parameters.ui.h:76 +#: ../gtk/parameters.ui.h:80 msgid "Show advanced settings" msgstr "顯示進階設定值" -#: ../gtk/parameters.ui.h:77 +#: ../gtk/parameters.ui.h:81 msgid "Level" msgstr "級數" -#: ../gtk/parameters.ui.h:78 +#: ../gtk/parameters.ui.h:82 msgid "User interface" msgstr "使用者介面" -#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2 +#: ../gtk/parameters.ui.h:83 ../gtk/ldap.ui.h:2 msgid "Server address:" msgstr "" -#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3 +#: ../gtk/parameters.ui.h:84 ../gtk/ldap.ui.h:3 msgid "Authentication method:" msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:86 msgid "LDAP Account setup" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:87 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:84 +#: ../gtk/parameters.ui.h:88 msgid "Done" msgstr "完成" -#: ../gtk/parameters.ui.h:85 -msgid "SIP (UDP)" -msgstr "" - -#: ../gtk/parameters.ui.h:86 -msgid "SIP (TCP)" -msgstr "" - -#: ../gtk/parameters.ui.h:87 -msgid "SIP (TLS)" -msgstr "" - #: ../gtk/buddylookup.ui.h:1 msgid "Search contacts in directory" msgstr "在目錄中搜尋" @@ -1488,10 +1496,6 @@ msgstr "加入我的清單" msgid "Search somebody" msgstr "搜尋某人" -#: ../gtk/waiting.ui.h:1 -msgid "Linphone" -msgstr "Linphone" - #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "請稍候" @@ -1691,68 +1695,68 @@ msgstr "" msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1534 +#: ../coreapi/linphonecore.c:1539 msgid "Ready" msgstr "準備就緒" -#: ../coreapi/linphonecore.c:2534 +#: ../coreapi/linphonecore.c:2551 msgid "Configuring" msgstr "" -#: ../coreapi/linphonecore.c:2708 +#: ../coreapi/linphonecore.c:2725 msgid "Looking for telephone number destination..." msgstr "尋找電話號碼目的端..." -#: ../coreapi/linphonecore.c:2710 +#: ../coreapi/linphonecore.c:2727 msgid "Could not resolve this number." msgstr "無法解析這個號碼。" #. must be known at that time -#: ../coreapi/linphonecore.c:2996 +#: ../coreapi/linphonecore.c:3013 msgid "Contacting" msgstr "正在連絡" -#: ../coreapi/linphonecore.c:3001 +#: ../coreapi/linphonecore.c:3018 msgid "Could not call" msgstr "無法通話" -#: ../coreapi/linphonecore.c:3152 +#: ../coreapi/linphonecore.c:3169 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "抱歉,我們已達瀏同步通話的最大數目" -#: ../coreapi/linphonecore.c:3310 +#: ../coreapi/linphonecore.c:3327 msgid "is contacting you" msgstr "正在連絡您" -#: ../coreapi/linphonecore.c:3311 +#: ../coreapi/linphonecore.c:3328 msgid " and asked autoanswer." msgstr "並要求自動接聽。" -#: ../coreapi/linphonecore.c:3435 +#: ../coreapi/linphonecore.c:3452 msgid "Modifying call parameters..." msgstr "修改通話參數..." -#: ../coreapi/linphonecore.c:3782 +#: ../coreapi/linphonecore.c:3802 msgid "Connected." msgstr "已連線。" -#: ../coreapi/linphonecore.c:3807 +#: ../coreapi/linphonecore.c:3827 msgid "Call aborted" msgstr "通話已放棄" -#: ../coreapi/linphonecore.c:3997 +#: ../coreapi/linphonecore.c:4024 msgid "Could not pause the call" msgstr "無法暫停通話" -#: ../coreapi/linphonecore.c:4000 +#: ../coreapi/linphonecore.c:4027 msgid "Pausing the current call..." msgstr "暫停目前的通話..." -#: ../coreapi/misc.c:433 +#: ../coreapi/misc.c:434 msgid "Stun lookup in progress..." msgstr "正在進行 Stun 搜尋..." -#: ../coreapi/misc.c:614 +#: ../coreapi/misc.c:615 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1837,100 +1841,100 @@ msgstr "遠端響鈴..." msgid "Early media." msgstr "早期媒體。" -#: ../coreapi/callbacks.c:533 +#: ../coreapi/callbacks.c:534 #, c-format msgid "Call with %s is paused." msgstr "和 %s 的通話已暫停。" -#: ../coreapi/callbacks.c:546 +#: ../coreapi/callbacks.c:547 #, c-format msgid "Call answered by %s - on hold." msgstr "通話由 %s 接聽 - 保留中。" -#: ../coreapi/callbacks.c:556 +#: ../coreapi/callbacks.c:557 msgid "Call resumed." msgstr "通話已繼續。" -#: ../coreapi/callbacks.c:560 +#: ../coreapi/callbacks.c:561 #, c-format msgid "Call answered by %s." msgstr "通話由 %s 接聽。" -#: ../coreapi/callbacks.c:583 +#: ../coreapi/callbacks.c:584 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:589 ../coreapi/callbacks.c:906 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:618 +#: ../coreapi/callbacks.c:619 msgid "We have been resumed." msgstr "" #. we are being paused -#: ../coreapi/callbacks.c:626 +#: ../coreapi/callbacks.c:628 msgid "We are paused by other party." msgstr "" #. reINVITE and in-dialogs UPDATE go here -#: ../coreapi/callbacks.c:660 +#: ../coreapi/callbacks.c:666 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:776 +#: ../coreapi/callbacks.c:782 msgid "Call terminated." msgstr "通話已終止。" -#: ../coreapi/callbacks.c:804 +#: ../coreapi/callbacks.c:810 msgid "User is busy." msgstr "使用者現正忙碌。" -#: ../coreapi/callbacks.c:805 +#: ../coreapi/callbacks.c:811 msgid "User is temporarily unavailable." msgstr "使用者暫時無法聯繫。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:807 +#: ../coreapi/callbacks.c:813 msgid "User does not want to be disturbed." msgstr "使用者不想要被打擾。" -#: ../coreapi/callbacks.c:808 +#: ../coreapi/callbacks.c:814 msgid "Call declined." msgstr "通話被拒接。" -#: ../coreapi/callbacks.c:823 +#: ../coreapi/callbacks.c:829 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:854 +#: ../coreapi/callbacks.c:860 msgid "Redirected" msgstr "已重新導向" -#: ../coreapi/callbacks.c:909 +#: ../coreapi/callbacks.c:915 msgid "Call failed." msgstr "通話失敗。" -#: ../coreapi/callbacks.c:987 +#: ../coreapi/callbacks.c:993 #, c-format msgid "Registration on %s successful." msgstr "在 %s 註冊成功。" -#: ../coreapi/callbacks.c:988 +#: ../coreapi/callbacks.c:994 #, c-format msgid "Unregistration on %s done." msgstr "在 %s 取消註冊完成。" -#: ../coreapi/callbacks.c:1006 +#: ../coreapi/callbacks.c:1012 msgid "no response timeout" msgstr "沒有回應逾時" -#: ../coreapi/callbacks.c:1009 +#: ../coreapi/callbacks.c:1015 #, c-format msgid "Registration on %s failed: %s" msgstr "在 %s 註冊失敗:%s" -#: ../coreapi/callbacks.c:1016 +#: ../coreapi/callbacks.c:1022 msgid "Service unavailable, retrying" msgstr "" @@ -1940,11 +1944,11 @@ msgstr "" msgid "Authentication token is %s" msgstr "" -#: ../coreapi/linphonecall.c:1305 +#: ../coreapi/linphonecall.c:1310 msgid "Call parameters were successfully modified." msgstr "" -#: ../coreapi/linphonecall.c:3659 +#: ../coreapi/linphonecall.c:3686 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." diff --git a/tester/Makefile.am b/tester/Makefile.am index 020bb4424..86510d794 100644 --- a/tester/Makefile.am +++ b/tester/Makefile.am @@ -33,6 +33,7 @@ liblinphonetester_la_SOURCES = \ upnp_tester.c \ video_tester.c \ common/bc_tester_utils.c + liblinphonetester_ladir = $(includedir)/linphone liblinphonetester_la_HEADERS = common/bc_tester_utils.h diff --git a/tester/ZIDCache.xml b/tester/ZIDCache.xml deleted file mode 100644 index 6c96b40cc..000000000 --- a/tester/ZIDCache.xml +++ /dev/null @@ -1,2 +0,0 @@ - -ef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b7719305d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b771935f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719302ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000069000001e8011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com123456789012345678901234567890123456765431262068d2df23e8f9b7719325d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193000000010000000001 diff --git a/tester/ZIDCacheAlice.xml b/tester/ZIDCacheAlice.xml deleted file mode 100644 index 0edd84bd9..000000000 --- a/tester/ZIDCacheAlice.xml +++ /dev/null @@ -1,2 +0,0 @@ - -ef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a917625d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000000f00000000 diff --git a/tester/ZIDCacheBob.xml b/tester/ZIDCacheBob.xml deleted file mode 100644 index 3795074a2..000000000 --- a/tester/ZIDCacheBob.xml +++ /dev/null @@ -1,4 +0,0 @@ - -005dbe0399643d953a2202dd - ef7692d0792a67491ae2d44e9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf01 - 1234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000002e0000000001 diff --git a/tester/call_tester.c b/tester/call_tester.c index 721f8362c..e3ddacfc0 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -17,10 +17,8 @@ */ -#include -#include + #include #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -78,7 +76,7 @@ void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState case LinphoneCallEarlyUpdating: counters->number_of_LinphoneCallEarlyUpdating++;break; case LinphoneCallEarlyUpdatedByRemote: counters->number_of_LinphoneCallEarlyUpdatedByRemote++;break; default: - CU_FAIL("unexpected event");break; + BC_FAIL("unexpected event");break; } } @@ -132,7 +130,7 @@ void linphone_transfer_state_changed(LinphoneCore *lc, LinphoneCall *transfered, case LinphoneCallStreamsRunning :counters->number_of_LinphoneTransferCallStreamsRunning++;break; case LinphoneCallError :counters->number_of_LinphoneTransferCallError++;break; default: - CU_FAIL("unexpected event");break; + BC_FAIL("unexpected event");break; } } @@ -157,8 +155,8 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana c1=linphone_core_get_current_call(caller->lc); c2=linphone_core_get_current_call(callee->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); if (!c1 || !c2) return; linphone_call_ref(c1); @@ -175,13 +173,13 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana } wait_for_until(caller->lc,callee->lc,&dummy,1,500); /*just to sleep while iterating*/ }while (!liblinphone_tester_clock_elapsed(&ts,12000)); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(c1)->round_trip_delay>0.0); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(c2)->round_trip_delay>0.0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(c1)->round_trip_delay>0.0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(c2)->round_trip_delay>0.0); if (linphone_call_log_video_enabled(linphone_call_get_call_log(c1))) { - CU_ASSERT_TRUE(linphone_call_get_video_stats(c1)->round_trip_delay>0.0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(c1)->round_trip_delay>0.0); } if (linphone_call_log_video_enabled(linphone_call_get_call_log(c2))) { - CU_ASSERT_TRUE(linphone_call_get_video_stats(c2)->round_trip_delay>0.0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(c2)->round_trip_delay>0.0); } linphone_call_unref(c1); linphone_call_unref(c2); @@ -207,21 +205,22 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr LinphoneCallParams *caller_params = caller_test_params->base; LinphoneCallParams *callee_params = callee_test_params->base; bool_t did_receive_call; + LinphoneCall *callee_call=NULL; setup_sdp_handling(caller_test_params, caller_mgr); setup_sdp_handling(callee_test_params, callee_mgr); if (!caller_params){ - CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(caller_mgr->lc,callee_mgr->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(caller_mgr->lc,callee_mgr->identity)); }else{ - CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(caller_mgr->lc,callee_mgr->identity,caller_params)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(caller_mgr->lc,callee_mgr->identity,caller_params)); } did_receive_call = wait_for(callee_mgr->lc ,caller_mgr->lc ,&callee_mgr->stat.number_of_LinphoneCallIncomingReceived ,initial_callee.number_of_LinphoneCallIncomingReceived+1); - CU_ASSERT_EQUAL(did_receive_call, !callee_test_params->sdp_simulate_error); + BC_ASSERT_EQUAL(did_receive_call, !callee_test_params->sdp_simulate_error, int, "%d"); sal_default_set_sdp_handling(caller_mgr->lc->sal, SalOpSDPNormal); sal_default_set_sdp_handling(callee_mgr->lc->sal, SalOpSDPNormal); @@ -229,8 +228,9 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr if (!did_receive_call) return 0; - CU_ASSERT_TRUE(linphone_core_inc_invite_pending(callee_mgr->lc)); - CU_ASSERT_EQUAL(caller_mgr->stat.number_of_LinphoneCallOutgoingProgress,initial_caller.number_of_LinphoneCallOutgoingProgress+1); + if (linphone_core_get_calls_nb(callee_mgr->lc)<=1) + BC_ASSERT_TRUE(linphone_core_inc_invite_pending(callee_mgr->lc)); + BC_ASSERT_EQUAL(caller_mgr->stat.number_of_LinphoneCallOutgoingProgress,initial_caller.number_of_LinphoneCallOutgoingProgress+1, int, "%d"); while (caller_mgr->stat.number_of_LinphoneCallOutgoingRinging!=(initial_caller.number_of_LinphoneCallOutgoingRinging + 1) @@ -242,11 +242,13 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr } - CU_ASSERT_TRUE((caller_mgr->stat.number_of_LinphoneCallOutgoingRinging==initial_caller.number_of_LinphoneCallOutgoingRinging+1) + BC_ASSERT_TRUE((caller_mgr->stat.number_of_LinphoneCallOutgoingRinging==initial_caller.number_of_LinphoneCallOutgoingRinging+1) ||(caller_mgr->stat.number_of_LinphoneCallOutgoingEarlyMedia==initial_caller.number_of_LinphoneCallOutgoingEarlyMedia+1)); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(callee_mgr->lc)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(callee_mgr->lc)); + callee_call=linphone_core_get_call_by_remote_address2(callee_mgr->lc,caller_mgr->identity); + if(!linphone_core_get_current_call(caller_mgr->lc) || !linphone_core_get_current_call(callee_mgr->lc) || !linphone_core_get_current_call_remote_address(callee_mgr->lc)) { return 0; } else if (caller_mgr->identity){ @@ -256,25 +258,27 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr if (linphone_call_params_get_privacy(linphone_call_get_current_params(linphone_core_get_current_call(caller_mgr->lc))) == LinphonePrivacyNone) { /*don't check in case of p asserted id*/ if (!lp_config_get_int(callee_mgr->lc->config,"sip","call_logs_use_asserted_id_instead_of_from",0)) - CU_ASSERT_TRUE(linphone_address_weak_equal(callee_from,linphone_core_get_current_call_remote_address(callee_mgr->lc))); + BC_ASSERT_TRUE(linphone_address_weak_equal(callee_from,linphone_call_get_remote_address(callee_call))); } else { - CU_ASSERT_FALSE(linphone_address_weak_equal(callee_from,linphone_core_get_current_call_remote_address(callee_mgr->lc))); + BC_ASSERT_FALSE(linphone_address_weak_equal(callee_from,linphone_call_get_remote_address(linphone_core_get_current_call(callee_mgr->lc)))); } linphone_address_destroy(callee_from); } + + if (callee_params){ - linphone_core_accept_call_with_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc),callee_params); + linphone_core_accept_call_with_params(callee_mgr->lc,callee_call,callee_params); }else if (build_callee_params){ - LinphoneCallParams *default_params=linphone_core_create_call_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc)); + LinphoneCallParams *default_params=linphone_core_create_call_params(callee_mgr->lc,callee_call); ms_message("Created default call params with video=%i", linphone_call_params_video_enabled(default_params)); - linphone_core_accept_call_with_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc),default_params); + linphone_core_accept_call_with_params(callee_mgr->lc,callee_call,default_params); linphone_call_params_destroy(default_params); }else{ - linphone_core_accept_call(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc)); + linphone_core_accept_call(callee_mgr->lc,callee_call); } - CU_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); - CU_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); + BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); + BC_ASSERT_TRUE(wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallConnected,initial_callee.number_of_LinphoneCallConnected+1)); /*just to sleep*/ result = wait_for(callee_mgr->lc,caller_mgr->lc,&caller_mgr->stat.number_of_LinphoneCallStreamsRunning,initial_caller.number_of_LinphoneCallStreamsRunning+1) && @@ -291,10 +295,10 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr || (linphone_core_get_media_encryption(caller_mgr->lc) == LinphoneMediaEncryptionDTLS) /*also take care of caller policy*/ ) wait_for(callee_mgr->lc,caller_mgr->lc,&callee_mgr->stat.number_of_LinphoneCallEncryptedOn,initial_callee.number_of_LinphoneCallEncryptedOn+1); { - const LinphoneCallParams* call_param = linphone_call_get_current_params(linphone_core_get_current_call(callee_mgr->lc)); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller_mgr->lc)); + const LinphoneCallParams* call_param = linphone_call_get_current_params(callee_call); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller_mgr->lc), int, "%d"); call_param = linphone_call_get_current_params(linphone_core_get_current_call(caller_mgr->lc)); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller_mgr->lc)); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller_mgr->lc), int, "%d"); } } @@ -328,10 +332,10 @@ bool_t call(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr){ void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2){ linphone_core_terminate_all_calls(m1->lc); - CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m1->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m2->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m1->stat.number_of_LinphoneCallReleased,1)); - CU_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m2->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m1->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m2->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m1->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(m1->lc,m2->lc,&m2->stat.number_of_LinphoneCallReleased,1)); } void simple_call_base(bool_t enable_multicast_recv_side) { @@ -369,18 +373,18 @@ void simple_call_base(bool_t enable_multicast_recv_side) { linphone_core_enable_audio_multicast(pauline->lc,enable_multicast_recv_side); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); /*check that display name is correctly propagated in From */ if (pauline_call){ from=linphone_call_get_remote_address(linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_PTR_NOT_NULL(from); + BC_ASSERT_PTR_NOT_NULL(from); if (from){ const char *dname=linphone_address_get_display_name(from); - CU_ASSERT_PTR_NOT_NULL(dname); + BC_ASSERT_PTR_NOT_NULL(dname); if (dname){ - CU_ASSERT_STRING_EQUAL(dname, "Super Marie"); + BC_ASSERT_STRING_EQUAL(dname, "Super Marie"); } } } @@ -392,7 +396,7 @@ void simple_call_base(bool_t enable_multicast_recv_side) { linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -414,7 +418,7 @@ static void call_with_timeouted_bye(void) { marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); sal_set_send_error(pauline->lc->sal,1500); /*to trash the message without generating error*/ timer_config.T1=50; /*to have timer F = 3s*/ @@ -425,20 +429,20 @@ static void call_with_timeouted_bye(void) { belle_sip_stack_set_timer_config(sal_get_belle_sip_stack(pauline->lc->sal),&timer_config); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1,timer_config.T1*84)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1,timer_config.T1*84)); sal_set_send_error(pauline->lc->sal,0); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1,5000)); - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1,5000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1,5000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -448,31 +452,31 @@ static void phone_number_normalization(void){ LinphoneCoreManager *marie = linphone_core_manager_new( "marie_rc"); LinphoneProxyConfig *cfg = linphone_core_create_proxy_config(marie->lc); char result[128]; - + linphone_proxy_config_set_dial_prefix(cfg, "33"); linphone_proxy_config_normalize_number(cfg, "0952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+33952636505"); + BC_ASSERT_STRING_EQUAL(result, "+33952636505"); linphone_proxy_config_normalize_number(cfg, "09 52 63 65 05", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+33952636505"); + BC_ASSERT_STRING_EQUAL(result, "+33952636505"); linphone_proxy_config_normalize_number(cfg, "09-52-63-65-05", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+33952636505"); + BC_ASSERT_STRING_EQUAL(result, "+33952636505"); linphone_proxy_config_normalize_number(cfg, "+31952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+31952636505"); + BC_ASSERT_STRING_EQUAL(result, "+31952636505"); linphone_proxy_config_normalize_number(cfg, "0033952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+33952636505"); + BC_ASSERT_STRING_EQUAL(result, "+33952636505"); linphone_proxy_config_normalize_number(cfg, "0033952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "+33952636505"); + BC_ASSERT_STRING_EQUAL(result, "+33952636505"); linphone_proxy_config_normalize_number(cfg, "toto", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "toto"); - + BC_ASSERT_STRING_EQUAL(result, "toto"); + linphone_proxy_config_set_dial_escape_plus(cfg, TRUE); linphone_proxy_config_normalize_number(cfg, "0033952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "0033952636505"); + BC_ASSERT_STRING_EQUAL(result, "0033952636505"); linphone_proxy_config_normalize_number(cfg, "0952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "0033952636505"); + BC_ASSERT_STRING_EQUAL(result, "0033952636505"); linphone_proxy_config_normalize_number(cfg, "+34952636505", result, sizeof(result)); - CU_ASSERT_STRING_EQUAL(result, "0034952636505"); - + BC_ASSERT_STRING_EQUAL(result, "0034952636505"); + linphone_proxy_config_unref(cfg); linphone_core_manager_destroy(marie); } @@ -492,19 +496,19 @@ static void direct_call_over_ipv6(){ linphone_core_set_default_proxy_config(marie->lc,NULL); /*wait for register in v6 mode, however sip2.linphone.org has an ipv6 address but doesn't listen to it*/ #if 0 - CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 2, 2000)); - CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 2, 2000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 2, 2000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 2, 2000)); #endif linphone_core_get_sip_transports_used(pauline->lc,&pauline_transports); linphone_address_set_port(pauline_dest,pauline_transports.tcp_port); linphone_core_invite_address(marie->lc,pauline_dest); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallOutgoingRinging,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallOutgoingRinging,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallIncomingReceived,1)); linphone_core_accept_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1)); liblinphone_tester_check_rtcp(marie,pauline); end_call(marie,pauline); @@ -524,8 +528,8 @@ static void call_outbound_with_multiple_proxy() { linphone_core_get_default_proxy(marie->lc, &lpc); linphone_core_set_default_proxy(marie->lc,NULL); - CU_ASSERT_FATAL(lpc != NULL); - CU_ASSERT_FATAL(registered_lpc != NULL); + BC_ASSERT_FATAL(lpc != NULL); + BC_ASSERT_FATAL(registered_lpc != NULL); // create new LPC that will successfully register linphone_proxy_config_set_identity(registered_lpc, linphone_proxy_config_get_identity(lpc)); @@ -541,13 +545,13 @@ static void call_outbound_with_multiple_proxy() { linphone_proxy_config_set_route(lpc, "12.13.14.15:5223;transport=udp;lr"); linphone_proxy_config_done(lpc); - CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); - CU_ASSERT_TRUE(wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationProgress, 2, 200)); - CU_ASSERT_TRUE(wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 1, 2000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationProgress, 2, 200)); + BC_ASSERT_TRUE(wait_for_until(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 1, 2000)); // calling marie should go through the second proxy config - CU_ASSERT_TRUE(call(marie, pauline)); + BC_ASSERT_TRUE(call(marie, pauline)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -569,27 +573,27 @@ static void multiple_answers_call() { lcs = ms_list_append(lcs,marie2->lc); - CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); - CU_ASSERT_PTR_NOT_NULL( linphone_core_invite_address(pauline->lc, marie1->identity ) ); + BC_ASSERT_PTR_NOT_NULL( linphone_core_invite_address(pauline->lc, marie1->identity ) ); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress, 1, 2000)); // marie 1 and 2 answer at the same time call1 = linphone_core_get_current_call(marie1->lc); call2 = linphone_core_get_current_call(marie2->lc); - CU_ASSERT_PTR_NOT_NULL_FATAL(call1); - CU_ASSERT_PTR_NOT_NULL_FATAL(call2); + BC_ASSERT_PTR_NOT_NULL_FATAL(call1); + BC_ASSERT_PTR_NOT_NULL_FATAL(call2); - CU_ASSERT_EQUAL( linphone_core_accept_call(marie1->lc, call1), 0); - CU_ASSERT_EQUAL( linphone_core_accept_call(marie2->lc, call2), 0); + BC_ASSERT_EQUAL( linphone_core_accept_call(marie1->lc, call1), 0, int, "%d"); + BC_ASSERT_EQUAL( linphone_core_accept_call(marie2->lc, call2), 0, int, "%d"); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 2000) ); linphone_core_manager_destroy(pauline); @@ -617,27 +621,27 @@ static void multiple_answers_call_with_media_relay(void) { linphone_core_set_user_agent(marie1->lc, "Natted Linphone", NULL); linphone_core_set_user_agent(marie2->lc, "Natted Linphone", NULL); - CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000)); - CU_ASSERT_PTR_NOT_NULL( linphone_core_invite_address(pauline->lc, marie1->identity ) ); + BC_ASSERT_PTR_NOT_NULL( linphone_core_invite_address(pauline->lc, marie1->identity ) ); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived, 1, 2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress, 1, 2000)); // marie 1 and 2 answer at the same time call1 = linphone_core_get_current_call(marie1->lc); call2 = linphone_core_get_current_call(marie2->lc); - CU_ASSERT_PTR_NOT_NULL_FATAL(call1); - CU_ASSERT_PTR_NOT_NULL_FATAL(call2); + BC_ASSERT_PTR_NOT_NULL_FATAL(call1); + BC_ASSERT_PTR_NOT_NULL_FATAL(call2); - CU_ASSERT_EQUAL( linphone_core_accept_call(marie1->lc, call1), 0); - CU_ASSERT_EQUAL( linphone_core_accept_call(marie2->lc, call2), 0); + BC_ASSERT_EQUAL( linphone_core_accept_call(marie1->lc, call1), 0, int, "%d"); + BC_ASSERT_EQUAL( linphone_core_accept_call(marie2->lc, call2), 0, int, "%d"); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 2000) ); linphone_core_manager_destroy(pauline); @@ -684,13 +688,13 @@ static void call_with_specified_codec_bitrate(void) { linphone_core_find_payload_type(pauline->lc,codec,rate,-1), min_bw); - CU_ASSERT_TRUE((call_ok=call(pauline,marie))); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (!call_ok) goto end; liblinphone_tester_check_rtcp(marie,pauline); marie_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc)); pauline_stats=linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(marie_stats->download_bandwidth<(min_bw+5+min_bw*.1)); - CU_ASSERT_TRUE(pauline_stats->download_bandwidth>(max_bw-5-max_bw*.1)); + BC_ASSERT_TRUE(marie_stats->download_bandwidth<(min_bw+5+min_bw*.1)); + BC_ASSERT_TRUE(pauline_stats->download_bandwidth>(max_bw-5-max_bw*.1)); end: linphone_core_manager_destroy(marie); @@ -713,7 +717,7 @@ static void simple_call_compatibility_mode(void) { LCSipTransports transport; linphone_core_get_default_proxy(lc_marie,&proxy); - CU_ASSERT_PTR_NOT_NULL (proxy); + BC_ASSERT_PTR_NOT_NULL (proxy); identity = linphone_address_new(linphone_proxy_config_get_identity(proxy)); @@ -733,31 +737,31 @@ static void simple_call_compatibility_mode(void) { linphone_core_set_sip_transports(lc_marie,&transport); stat_marie->number_of_LinphoneRegistrationOk=0; - CU_ASSERT_TRUE (wait_for(lc_marie,lc_marie,&stat_marie->number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE (wait_for(lc_marie,lc_marie,&stat_marie->number_of_LinphoneRegistrationOk,1)); linphone_core_invite_address(lc_marie,pauline->identity); - CU_ASSERT_TRUE (wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallIncomingReceived,1)); - CU_ASSERT_TRUE(linphone_core_inc_invite_pending(lc_pauline)); - CU_ASSERT_EQUAL(stat_marie->number_of_LinphoneCallOutgoingProgress,1); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallOutgoingRinging,1)); + BC_ASSERT_TRUE (wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_TRUE(linphone_core_inc_invite_pending(lc_pauline)); + BC_ASSERT_EQUAL(stat_marie->number_of_LinphoneCallOutgoingProgress,1, int, "%d"); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallOutgoingRinging,1)); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(lc_pauline)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(lc_pauline)); if (linphone_core_get_current_call_remote_address(lc_pauline)) { - CU_ASSERT_TRUE(linphone_address_weak_equal(identity,linphone_core_get_current_call_remote_address(lc_pauline))); + BC_ASSERT_TRUE(linphone_address_weak_equal(identity,linphone_core_get_current_call_remote_address(lc_pauline))); linphone_address_destroy(identity); linphone_core_accept_call(lc_pauline,linphone_core_get_current_call(lc_pauline)); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallConnected,1)); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallConnected,1)); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallStreamsRunning,1)); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallConnected,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallConnected,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallStreamsRunning,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,1)); /*just to sleep*/ wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallStreamsRunning,3); linphone_core_terminate_all_calls(lc_pauline); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(lc_pauline,lc_marie,&stat_marie->number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -770,14 +774,14 @@ static void cancelled_call(void) { LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); linphone_core_terminate_call(pauline->lc,out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - //CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonCanceled); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + //BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonCanceled, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0, int, "%d"); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); linphone_call_unref(out_call); linphone_core_manager_destroy(marie); @@ -793,7 +797,7 @@ void disable_all_audio_codecs_except_one(LinphoneCore *lc, const char *mime, int linphone_core_enable_payload_type(lc,pt,FALSE); } pt=linphone_core_find_payload_type(lc,mime,rate,-1); - CU_ASSERT_PTR_NOT_NULL_FATAL(pt); + BC_ASSERT_PTR_NOT_NULL_FATAL(pt); linphone_core_enable_payload_type(lc,pt,TRUE); } @@ -806,7 +810,8 @@ void disable_all_video_codecs_except_one(LinphoneCore *lc, const char *mime) { for(it = codecs; it != NULL; it = it->next) { linphone_core_enable_payload_type(lc, (PayloadType *)it->data, FALSE); } - CU_ASSERT_PTR_NOT_NULL_FATAL(pt = linphone_core_find_payload_type(lc, mime, -1, -1)); + pt = linphone_core_find_payload_type(lc, mime, -1, -1); + BC_ASSERT_PTR_NOT_NULL_FATAL(pt); linphone_core_enable_payload_type(lc, pt, TRUE); } #endif @@ -824,10 +829,10 @@ static void call_with_dns_time_out(void) { ms_usleep(200000); linphone_core_iterate(marie->lc); } - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingInit,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingProgress,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallError,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallReleased,1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingInit,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingProgress,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallError,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallReleased,1, int, "%d"); linphone_core_manager_destroy(marie); } @@ -837,21 +842,21 @@ static void early_cancelled_call(void) { LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); linphone_core_terminate_call(pauline->lc,out_call); /*since everything is executed in a row, no response can be received from the server, thus the CANCEL cannot be sent. It will ring at Marie's side.*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1, int, "%d"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); /* now the CANCEL should have been sent and the the call at marie's side should terminate*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -863,13 +868,13 @@ static void cancelled_ringing_call(void) { LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); linphone_core_terminate_call(pauline->lc,out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallEnd,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallEnd,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1, int, "%d"); linphone_call_unref(out_call); linphone_core_manager_destroy(marie); @@ -887,21 +892,36 @@ static void early_declined_call(void) { linphone_call_ref(out_call); /*wait until flexisip transfers the busy...*/ - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,33000)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallError,1); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,33000)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallError,1, int, "%d"); /* FIXME http://git.linphone.org/mantis/view.php?id=757 - CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonBusy); + BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonBusy, int, "%d"); */ if (ms_list_size(linphone_core_get_call_logs(pauline->lc))>0) { - CU_ASSERT_PTR_NOT_NULL(out_call_log=(LinphoneCallLog*)(linphone_core_get_call_logs(pauline->lc)->data)); - CU_ASSERT_EQUAL(linphone_call_log_get_status(out_call_log),LinphoneCallAborted); + BC_ASSERT_PTR_NOT_NULL(out_call_log=(LinphoneCallLog*)(linphone_core_get_call_logs(pauline->lc)->data)); + BC_ASSERT_EQUAL(linphone_call_log_get_status(out_call_log),LinphoneCallAborted, int, "%d"); } linphone_call_unref(out_call); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } +static void call_busy_when_calling_self(void) { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCall *out_call=linphone_core_invite_address(marie->lc,marie->identity); + linphone_call_ref(out_call); + + /*wait until flexisip transfers the busy...*/ + BC_ASSERT_TRUE(wait_for_until(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCallError,1,33000)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallError,1, int, "%d"); + + BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonBusy, int, "%d"); + linphone_call_unref(out_call); + linphone_core_manager_destroy(marie); +} + + static void call_declined(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); @@ -909,17 +929,17 @@ static void call_declined(void) { LinphoneCall* in_call; LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); - CU_ASSERT_PTR_NOT_NULL(in_call=linphone_core_get_current_call(marie->lc)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_PTR_NOT_NULL(in_call=linphone_core_get_current_call(marie->lc)); if (in_call) { linphone_call_ref(in_call); linphone_core_terminate_call(marie->lc,in_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallEnd,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1); - CU_ASSERT_EQUAL(linphone_call_get_reason(in_call),LinphoneReasonDeclined); - CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonDeclined); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallEnd,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallEnd,1, int, "%d"); + BC_ASSERT_EQUAL(linphone_call_get_reason(in_call),LinphoneReasonDeclined, int, "%d"); + BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonDeclined, int, "%d"); linphone_call_unref(in_call); } linphone_call_unref(out_call); @@ -931,11 +951,11 @@ static void call_terminated_by_caller(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -947,11 +967,11 @@ static void call_with_no_sdp(void) { linphone_core_enable_sdp_200_ack(marie->lc,TRUE); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -965,13 +985,13 @@ static void call_with_no_sdp_ack_without_sdp(void){ linphone_core_enable_sdp_200_ack(marie->lc,TRUE); linphone_core_invite_address(marie->lc,pauline->identity); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallIncomingReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallIncomingReceived,1)); call=linphone_core_get_current_call(pauline->lc); if (call){ sal_call_set_sdp_handling(call->op, SalOpSDPSimulateError); /*this will have the effect that the SDP received in the ACK will be ignored*/ linphone_core_accept_call(pauline->lc, call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -988,13 +1008,13 @@ static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee c1=linphone_core_get_current_call(caller->lc); c2=linphone_core_get_current_call(callee->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); if (!c1 || !c2) return FALSE; linphone_call_ref(c1); linphone_call_ref(c2); - CU_ASSERT_EQUAL(linphone_call_params_video_enabled(linphone_call_get_current_params(c1)),linphone_call_params_video_enabled(linphone_call_get_current_params(c2))); + BC_ASSERT_EQUAL(linphone_call_params_video_enabled(linphone_call_get_current_params(c1)),linphone_call_params_video_enabled(linphone_call_get_current_params(c2)), int, "%d"); video_enabled=linphone_call_params_video_enabled(linphone_call_get_current_params(c1)); liblinphone_tester_clock_start(&ts); do{ @@ -1029,11 +1049,11 @@ static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee /*make sure encryption mode are preserved*/ if (c1) { const LinphoneCallParams* call_param = linphone_call_get_current_params(c1); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc)); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc), int, "%d"); } if (c2) { const LinphoneCallParams* call_param = linphone_call_get_current_params(c2); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(callee->lc)); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(callee->lc), int, "%d"); } linphone_call_unref(c1); linphone_call_unref(c2); @@ -1041,13 +1061,13 @@ static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee } static void _call_with_ice_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t caller_with_ice, bool_t callee_with_ice, bool_t random_ports) { + bool_t call_ok; + if (callee_with_ice){ linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(marie->lc,"stun.linphone.org"); } if (caller_with_ice){ linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(pauline->lc,"stun.linphone.org"); } if (random_ports){ @@ -1057,21 +1077,23 @@ static void _call_with_ice_base(LinphoneCoreManager* pauline,LinphoneCoreManager linphone_core_set_video_port(pauline->lc,-1); } - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; if (callee_with_ice && caller_with_ice) { /*wait for the ICE reINVITE to complete*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); + BC_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); } liblinphone_tester_check_rtcp(marie,pauline); /*then close the call*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } static void _call_with_ice(bool_t caller_with_ice, bool_t callee_with_ice, bool_t random_ports) { @@ -1093,10 +1115,8 @@ static void call_with_ice_no_sdp(void){ linphone_core_enable_sdp_200_ack(pauline->lc,TRUE); linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(marie->lc,"stun.linphone.org"); linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(pauline->lc,"stun.linphone.org"); call(pauline,marie); @@ -1142,22 +1162,22 @@ static void call_with_custom_headers(void) { linphone_call_params_add_custom_header(params,"Weather","bad"); linphone_call_params_add_custom_header(params,"Working","yes"); - CU_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); + BC_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); linphone_call_params_destroy(params); call_marie=linphone_core_get_current_call(marie->lc); call_pauline=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(call_marie); - CU_ASSERT_PTR_NOT_NULL(call_pauline); + BC_ASSERT_PTR_NOT_NULL(call_marie); + BC_ASSERT_PTR_NOT_NULL(call_pauline); marie_remote_params=linphone_call_get_remote_params(call_marie); hvalue=linphone_call_params_get_custom_header(marie_remote_params,"Weather"); - CU_ASSERT_PTR_NOT_NULL(hvalue); - CU_ASSERT_STRING_EQUAL(hvalue,"bad"); + BC_ASSERT_PTR_NOT_NULL(hvalue); + BC_ASSERT_STRING_EQUAL(hvalue,"bad"); hvalue=linphone_call_params_get_custom_header(marie_remote_params,"uriHeader"); - CU_ASSERT_PTR_NOT_NULL(hvalue); - CU_ASSERT_STRING_EQUAL(hvalue,"myUriHeader"); + BC_ASSERT_PTR_NOT_NULL(hvalue); + BC_ASSERT_STRING_EQUAL(hvalue,"myUriHeader"); // FIXME: we have to strdup because successive calls to get_remote_params erase the returned const char*!! @@ -1167,12 +1187,12 @@ static void call_with_custom_headers(void) { marie_remote_contact = ms_strdup(linphone_call_get_remote_contact(call_marie)); marie_remote_contact_header = ms_strdup(linphone_call_params_get_custom_header(linphone_call_get_remote_params(call_marie), "Contact")); - CU_ASSERT_PTR_NOT_NULL(pauline_remote_contact); - CU_ASSERT_PTR_NOT_NULL(pauline_remote_contact_header); - CU_ASSERT_PTR_NOT_NULL(marie_remote_contact); - CU_ASSERT_PTR_NOT_NULL(marie_remote_contact_header); - CU_ASSERT_STRING_EQUAL(pauline_remote_contact,pauline_remote_contact_header); - CU_ASSERT_STRING_EQUAL(marie_remote_contact,marie_remote_contact_header); + BC_ASSERT_PTR_NOT_NULL(pauline_remote_contact); + BC_ASSERT_PTR_NOT_NULL(pauline_remote_contact_header); + BC_ASSERT_PTR_NOT_NULL(marie_remote_contact); + BC_ASSERT_PTR_NOT_NULL(marie_remote_contact_header); + BC_ASSERT_STRING_EQUAL(pauline_remote_contact,pauline_remote_contact_header); + BC_ASSERT_STRING_EQUAL(marie_remote_contact,marie_remote_contact_header); ms_free(pauline_remote_contact); ms_free(pauline_remote_contact_header); @@ -1182,8 +1202,8 @@ static void call_with_custom_headers(void) { /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1194,39 +1214,43 @@ void call_paused_resumed_base(bool_t multicast) { LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); LinphoneCall* call_pauline; const rtp_stats_t * stats; + bool_t call_ok; linphone_core_enable_audio_multicast(pauline->lc,multicast); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + + if (!call_ok) goto end; + call_pauline = linphone_core_get_current_call(pauline->lc); wait_for_until(pauline->lc, marie->lc, NULL, 5, 3000); linphone_core_pause_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); linphone_core_resume_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); - CU_ASSERT_EQUAL(stats->cum_packet_loss, 0); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1236,11 +1260,11 @@ static void call_paused_resumed(void) { #define CHECK_CURRENT_LOSS_RATE() \ rtcp_count_current = pauline->stat.number_of_rtcp_sent; \ /*wait for an RTCP packet to have an accurate cumulative lost value*/ \ - CU_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &pauline->stat.number_of_rtcp_sent, rtcp_count_current+1, 10000)); \ + BC_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &pauline->stat.number_of_rtcp_sent, rtcp_count_current+1, 10000)); \ stats = rtp_session_get_stats(call_pauline->audiostream->ms.sessions.rtp_session); \ loss_percentage = stats->cum_packet_loss * 100.f / (stats->packet_recv + stats->cum_packet_loss); \ - CU_ASSERT_TRUE(.75 * params.loss_rate < loss_percentage); \ - CU_ASSERT_TRUE(loss_percentage < 1.25 * params.loss_rate) + BC_ASSERT_TRUE(.75 * params.loss_rate < loss_percentage); \ + BC_ASSERT_TRUE(loss_percentage < 1.25 * params.loss_rate) static void call_paused_resumed_with_loss(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); @@ -1254,7 +1278,7 @@ static void call_paused_resumed_with_loss(void) { params.enabled=TRUE; params.loss_rate=20; - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); call_pauline = linphone_core_get_current_call(pauline->lc); if (call_pauline){ rtp_session_enable_network_simulation(call_pauline->audiostream->ms.sessions.rtp_session,¶ms); @@ -1265,25 +1289,25 @@ static void call_paused_resumed_with_loss(void) { /*pause call*/ linphone_core_pause_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); CHECK_CURRENT_LOSS_RATE(); /*resume*/ linphone_core_resume_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); wait_for_until(pauline->lc, marie->lc, NULL, 5, 6000); /*since stats are NOT totally reset during pause, the stats->packet_recv is computed from the start of call. This test ensures that the loss rate is consistent during the entire call.*/ CHECK_CURRENT_LOSS_RATE(); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); @@ -1294,11 +1318,11 @@ bool_t pause_call_1(LinphoneCoreManager* mgr_1,LinphoneCall* call_1,LinphoneCore stats initial_call_stat_1=mgr_1->stat; stats initial_call_stat_2=mgr_2->stat; linphone_core_pause_call(mgr_1->lc,call_1); - CU_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_1->stat.number_of_LinphoneCallPausing,initial_call_stat_1.number_of_LinphoneCallPausing+1)); - CU_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_1->stat.number_of_LinphoneCallPaused,initial_call_stat_1.number_of_LinphoneCallPaused+1)); - CU_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_2->stat.number_of_LinphoneCallPausedByRemote,initial_call_stat_2.number_of_LinphoneCallPausedByRemote+1)); - CU_ASSERT_EQUAL(linphone_call_get_state(call_1),LinphoneCallPaused); - CU_ASSERT_EQUAL(linphone_call_get_state(call_2),LinphoneCallPausedByRemote); + BC_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_1->stat.number_of_LinphoneCallPausing,initial_call_stat_1.number_of_LinphoneCallPausing+1)); + BC_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_1->stat.number_of_LinphoneCallPaused,initial_call_stat_1.number_of_LinphoneCallPaused+1)); + BC_ASSERT_TRUE(wait_for(mgr_1->lc,mgr_2->lc,&mgr_2->stat.number_of_LinphoneCallPausedByRemote,initial_call_stat_2.number_of_LinphoneCallPausedByRemote+1)); + BC_ASSERT_EQUAL(linphone_call_get_state(call_1),LinphoneCallPaused, int, "%d"); + BC_ASSERT_EQUAL(linphone_call_get_state(call_2),LinphoneCallPausedByRemote, int, "%d"); return linphone_call_get_state(call_1) == LinphoneCallPaused && linphone_call_get_state(call_2)==LinphoneCallPausedByRemote; } #if 0 @@ -1309,37 +1333,37 @@ void concurrent_paused_resumed_base() { const rtp_stats_t * stats; - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); call_pauline = linphone_core_get_current_call(pauline->lc); call_marie = linphone_core_get_current_call(marie->lc); linphone_core_pause_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); linphone_core_pause_call(marie->lc,call_marie); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); linphone_core_resume_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); - CU_ASSERT_EQUAL(stats->cum_packet_loss, 0); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); @@ -1351,33 +1375,35 @@ static void call_paused_resumed_from_callee(void) { LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); LinphoneCall* call_marie; const rtp_stats_t * stats; + bool_t call_ok; - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; call_marie = linphone_core_get_current_call(marie->lc); linphone_core_pause_call(marie->lc,call_marie); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); linphone_core_resume_call(marie->lc,call_marie); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); /*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/ stats = rtp_session_get_stats(call_marie->sessions->rtp_session); - CU_ASSERT_EQUAL(stats->cum_packet_loss, 0); + BC_ASSERT_EQUAL(stats->cum_packet_loss, 0, int, "%d"); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1390,18 +1416,16 @@ static void audio_call_with_ice_no_matching_audio_codecs(void) { linphone_core_enable_payload_type(marie->lc, linphone_core_find_payload_type(marie->lc, "PCMU", 8000, 1), FALSE); /* Disable PCMU */ linphone_core_enable_payload_type(marie->lc, linphone_core_find_payload_type(marie->lc, "PCMA", 8000, 1), TRUE); /* Enable PCMA */ linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce); - linphone_core_set_stun_server(marie->lc, "stun.linphone.org"); linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce); - linphone_core_set_stun_server(pauline->lc, "stun.linphone.org"); out_call = linphone_core_invite_address(marie->lc, pauline->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingInit, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingInit, 1)); /* flexisip will retain the 488 until the "urgent reply" timeout arrives. */ - CU_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallError, 1, 6000)); - CU_ASSERT_EQUAL(linphone_call_get_reason(out_call), LinphoneReasonNotAcceptable); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallIncomingReceived, 0); + BC_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallError, 1, 6000)); + BC_ASSERT_EQUAL(linphone_call_get_reason(out_call), LinphoneReasonNotAcceptable, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallIncomingReceived, 0, int, "%d"); linphone_call_unref(out_call); linphone_core_manager_destroy(marie); @@ -1409,7 +1433,7 @@ static void audio_call_with_ice_no_matching_audio_codecs(void) { } #ifdef VIDEO_ENABLED -static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) { +static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee, bool_t change_video_policy) { LinphoneVideoPolicy caller_policy; LinphoneCallParams* callee_params; LinphoneCall* call_obj; @@ -1417,16 +1441,18 @@ static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager if (!linphone_core_get_current_call(callee->lc) || linphone_call_get_state(linphone_core_get_current_call(callee->lc)) != LinphoneCallStreamsRunning || !linphone_core_get_current_call(caller->lc) || linphone_call_get_state(linphone_core_get_current_call(caller->lc)) != LinphoneCallStreamsRunning ) { ms_warning("bad state for adding video"); - return FALSE; + return NULL; } - caller_policy.automatically_accept=TRUE; - caller_policy.automatically_initiate=TRUE; + if (change_video_policy) { + caller_policy.automatically_accept=TRUE; + caller_policy.automatically_initiate=TRUE; + linphone_core_set_video_policy(caller->lc,&caller_policy); + } linphone_core_enable_video_capture(callee->lc, TRUE); linphone_core_enable_video_display(callee->lc, TRUE); linphone_core_enable_video_capture(caller->lc, TRUE); linphone_core_enable_video_display(caller->lc, FALSE); - linphone_core_set_video_policy(caller->lc,&caller_policy); if ((call_obj = linphone_core_get_current_call(callee->lc))) { callee_params = linphone_call_params_copy(linphone_call_get_current_params(call_obj)); @@ -1437,18 +1463,25 @@ static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager return call_obj; } -static bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) { +bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee, bool_t change_video_policy) { stats initial_caller_stat=caller->stat; stats initial_callee_stat=callee->stat; + const LinphoneVideoPolicy *video_policy; LinphoneCall *call_obj; - if ((call_obj=setup_video(caller, callee))){ - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning+1)); + if ((call_obj=setup_video(caller, callee, change_video_policy))){ + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning+1)); - CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); - CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + video_policy = linphone_core_get_video_policy(caller->lc); + if (video_policy->automatically_accept) { + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + } else { + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + } if (linphone_core_get_media_encryption(caller->lc) != LinphoneMediaEncryptionNone && linphone_core_get_media_encryption(callee->lc) != LinphoneMediaEncryptionNone) { const LinphoneCallParams* call_param; @@ -1474,16 +1507,20 @@ static bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) } call_param = linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc)); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc), int, "%d"); call_param = linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)); - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc)); + BC_ASSERT_EQUAL(linphone_call_params_get_media_encryption(call_param),linphone_core_get_media_encryption(caller->lc), int, "%d"); } - linphone_call_set_next_video_frame_decoded_callback(call_obj,linphone_call_cb,callee->lc); - /*send vfu*/ - linphone_call_send_vfu_request(call_obj); - return wait_for(caller->lc,callee->lc,&callee->stat.number_of_IframeDecoded,initial_callee_stat.number_of_IframeDecoded+1); + if (video_policy->automatically_accept) { + linphone_call_set_next_video_frame_decoded_callback(call_obj,linphone_call_cb,callee->lc); + /*send vfu*/ + linphone_call_send_vfu_request(call_obj); + return wait_for(caller->lc,callee->lc,&callee->stat.number_of_IframeDecoded,initial_callee_stat.number_of_IframeDecoded+1); + } else { + return TRUE; + } } return FALSE; } @@ -1509,13 +1546,13 @@ static bool_t remove_video(LinphoneCoreManager *caller, LinphoneCoreManager *cal linphone_call_params_enable_video(callee_params, FALSE); linphone_core_update_call(callee->lc, call_obj, callee_params); - CU_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &caller->stat.number_of_LinphoneCallUpdatedByRemote, initial_caller_stat.number_of_LinphoneCallUpdatedByRemote + 1)); - CU_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &callee->stat.number_of_LinphoneCallUpdating, initial_callee_stat.number_of_LinphoneCallUpdating + 1)); - CU_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &callee->stat.number_of_LinphoneCallStreamsRunning, initial_callee_stat.number_of_LinphoneCallStreamsRunning + 1)); - CU_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &caller->stat.number_of_LinphoneCallStreamsRunning, initial_caller_stat.number_of_LinphoneCallStreamsRunning + 1)); + BC_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &caller->stat.number_of_LinphoneCallUpdatedByRemote, initial_caller_stat.number_of_LinphoneCallUpdatedByRemote + 1)); + BC_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &callee->stat.number_of_LinphoneCallUpdating, initial_callee_stat.number_of_LinphoneCallUpdating + 1)); + BC_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &callee->stat.number_of_LinphoneCallStreamsRunning, initial_callee_stat.number_of_LinphoneCallStreamsRunning + 1)); + BC_ASSERT_TRUE(wait_for(caller->lc, callee->lc, &caller->stat.number_of_LinphoneCallStreamsRunning, initial_caller_stat.number_of_LinphoneCallStreamsRunning + 1)); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); return TRUE; } @@ -1525,14 +1562,44 @@ static bool_t remove_video(LinphoneCoreManager *caller, LinphoneCoreManager *cal static void call_with_video_added(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + bool_t call_ok; - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; + + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +static void call_with_video_added_2(void) { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + bool_t call_ok; + /*in this variant marie is already in automatically accept*/ + LinphoneVideoPolicy marie_policy; + marie_policy.automatically_accept=TRUE; + + + linphone_core_set_video_policy(marie->lc,&marie_policy); + linphone_core_enable_video_capture(marie->lc, TRUE); + linphone_core_enable_video_display(marie->lc, FALSE); + + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; + + BC_ASSERT_TRUE(add_video(marie,pauline, TRUE)); + /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1540,20 +1607,22 @@ static void call_with_video_added(void) { static void call_with_video_added_random_ports(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + bool_t call_ok; linphone_core_set_audio_port(marie->lc,-1); linphone_core_set_video_port(marie->lc,-1); linphone_core_set_audio_port(pauline->lc,-1); linphone_core_set_video_port(pauline->lc,-1); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1562,19 +1631,22 @@ static void call_with_several_video_switches(void) { int dummy = 0; LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + bool_t call_ok; + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); - CU_ASSERT_TRUE(add_video(pauline,marie)); + if (!call_ok) goto end; + + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ - CU_ASSERT_TRUE(remove_video(pauline,marie)); - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE(remove_video(pauline,marie)); + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ - CU_ASSERT_TRUE(remove_video(pauline,marie)); + BC_ASSERT_TRUE(remove_video(pauline,marie)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1583,27 +1655,29 @@ static void srtp_call_with_several_video_switches(void) { int dummy = 0; LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + bool_t call_ok; if (linphone_core_media_encryption_supported(marie->lc, LinphoneMediaEncryptionSRTP)) { linphone_core_set_media_encryption(marie->lc, LinphoneMediaEncryptionSRTP); linphone_core_set_media_encryption(pauline->lc, LinphoneMediaEncryptionSRTP); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ - CU_ASSERT_TRUE(remove_video(pauline,marie)); - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE(remove_video(pauline,marie)); + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); wait_for_until(pauline->lc,marie->lc,&dummy,1,1000); /* Wait for VFU request exchanges to be finished. */ - CU_ASSERT_TRUE(remove_video(pauline,marie)); + BC_ASSERT_TRUE(remove_video(pauline,marie)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } else { ms_warning("Not tested because SRTP is not available."); } - +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1615,6 +1689,8 @@ static void call_with_declined_video_base(bool_t using_policy) { LinphoneCall* pauline_call; LinphoneVideoPolicy marie_policy, pauline_policy; LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; + bool_t call_ok; + linphone_core_enable_video_capture(marie->lc, TRUE); linphone_core_enable_video_display(marie->lc, TRUE); linphone_core_enable_video_capture(pauline->lc, TRUE); @@ -1639,21 +1715,23 @@ static void call_with_declined_video_base(bool_t using_policy) { linphone_call_params_enable_video(callee_test_params.base,FALSE); } - CU_ASSERT_TRUE(call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy)); + BC_ASSERT_TRUE((call_ok=call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy))); + if (!call_ok) goto end; linphone_call_params_destroy(caller_test_params.base); if (callee_test_params.base) linphone_call_params_destroy(callee_test_params.base); marie_call=linphone_core_get_current_call(marie->lc); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); - CU_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); + BC_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); + BC_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1716,7 +1794,7 @@ static void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* linphone_call_params_enable_video(callee_test_params.base,TRUE); } - CU_ASSERT_TRUE(call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy)); + BC_ASSERT_TRUE(call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy)); marie_call=linphone_core_get_current_call(marie->lc); pauline_call=linphone_core_get_current_call(pauline->lc); @@ -1725,16 +1803,16 @@ static void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* if (marie_call && pauline_call ) { if (callee_video_enabled && caller_video_enabled) { - CU_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); - CU_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); + BC_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); + BC_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); /*check video path*/ linphone_call_set_next_video_frame_decoded_callback(marie_call,linphone_call_cb,marie->lc); linphone_call_send_vfu_request(marie_call); - CU_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); + BC_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); } else { - CU_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); - CU_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); + BC_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); + BC_ASSERT_FALSE(linphone_call_log_video_enabled(linphone_call_get_call_log(pauline_call))); } liblinphone_tester_check_rtcp(marie,pauline); @@ -1745,8 +1823,8 @@ static void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) { video_call_base_2(pauline,marie,using_policy,mode,callee_video_enabled,caller_video_enabled); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } static void video_call(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); @@ -1825,44 +1903,79 @@ static void call_with_ice_video_to_novideo(void) { linphone_core_manager_destroy(pauline); } -static void call_with_ice_video_added(void) { - LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); - LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneVideoPolicy vpol={0}; - linphone_core_set_video_policy(pauline->lc,&vpol); - linphone_core_set_video_policy(marie->lc,&vpol); +static void _call_with_ice_video(LinphoneVideoPolicy caller_policy, LinphoneVideoPolicy callee_policy, + bool_t video_added_by_caller, bool_t video_added_by_callee, bool_t video_removed_by_caller, bool_t video_removed_by_callee) { + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); + bool_t call_ok; - linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(marie->lc,"stun.linphone.org"); + linphone_core_set_video_policy(pauline->lc, &caller_policy); + linphone_core_set_video_policy(marie->lc, &callee_policy); + linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce); + linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce); + linphone_core_set_audio_port(marie->lc, -1); + linphone_core_set_video_port(marie->lc, -1); + linphone_core_set_audio_port(pauline->lc, -1); + linphone_core_set_video_port(pauline->lc, -1); - linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); - linphone_core_set_stun_server(pauline->lc,"stun.linphone.org"); + BC_ASSERT_TRUE(call_ok = call(pauline, marie)); + if (!call_ok) goto end; + BC_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection)); + /* Wait for ICE reINVITEs to complete. */ + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2) + && wait_for(pauline->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 2)); - if (1){ - linphone_core_set_audio_port(marie->lc,-1); - linphone_core_set_video_port(marie->lc,-1); - linphone_core_set_audio_port(pauline->lc,-1); - linphone_core_set_video_port(pauline->lc,-1); + if (video_added_by_caller) { + BC_ASSERT_TRUE(add_video(marie, pauline, FALSE)); + } else if (video_added_by_callee) { + BC_ASSERT_TRUE(add_video(pauline, marie, FALSE)); + } + if (video_added_by_caller || video_added_by_callee) { + BC_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection)); } - CU_ASSERT_TRUE(call(pauline,marie)); - CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); - /*wait for ICE reINVITEs to complete*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2) - && - wait_for(pauline->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(add_video(pauline,marie)); - CU_ASSERT_TRUE(check_ice(pauline,marie,LinphoneIceStateHostConnection)); + if (video_removed_by_caller) { + BC_ASSERT_TRUE(remove_video(marie, pauline)); + } else if (video_removed_by_callee) { + BC_ASSERT_TRUE(remove_video(pauline, marie)); + } + if (video_removed_by_caller || video_removed_by_callee) { + BC_ASSERT_TRUE(check_ice(pauline, marie, LinphoneIceStateHostConnection)); + } + +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } +static void call_with_ice_video_added(void) { + LinphoneVideoPolicy vpol = { TRUE, TRUE }; + _call_with_ice_video(vpol, vpol, TRUE, FALSE, TRUE, FALSE); +} + +static void call_with_ice_video_added_2(void) { + LinphoneVideoPolicy vpol = { TRUE, TRUE }; + _call_with_ice_video(vpol, vpol, TRUE, FALSE, FALSE, TRUE); +} + +static void call_with_ice_video_added_3(void) { + LinphoneVideoPolicy vpol = { TRUE, TRUE }; + _call_with_ice_video(vpol, vpol, FALSE, TRUE, TRUE, FALSE); +} + +static void call_with_ice_video_added_and_refused(void) { + LinphoneVideoPolicy caller_policy = { TRUE, TRUE }; + LinphoneVideoPolicy callee_policy = { FALSE, FALSE }; + _call_with_ice_video(caller_policy, callee_policy, TRUE, FALSE, FALSE, FALSE); +} + + static void video_call_with_early_media_no_matching_audio_codecs(void) { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc"); - LinphoneCall *out_call; + LinphoneCall *out_call, *pauline_call; LinphoneVideoPolicy vpol={0}; linphone_core_enable_video_capture(marie->lc, TRUE); @@ -1880,30 +1993,34 @@ static void video_call_with_early_media_no_matching_audio_codecs(void) { out_call = linphone_core_invite_address(marie->lc, pauline->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingInit, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallIncomingReceived, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingRinging, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingInit, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallIncomingReceived, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingRinging, 1)); - linphone_core_accept_early_media(pauline->lc,linphone_core_get_current_call(pauline->lc)); + pauline_call = linphone_core_get_current_call(pauline->lc); + if (!pauline_call) goto end; - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia, 1)); + linphone_core_accept_early_media(pauline->lc, pauline_call); + + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia, 1)); /*audio stream shall not have been requested to start*/ - CU_ASSERT_PTR_NULL(linphone_core_get_current_call(pauline->lc)->audiostream->soundread); + BC_ASSERT_PTR_NULL(pauline_call->audiostream->soundread); - CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(out_call))==TRUE); - CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))==TRUE); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(out_call))==TRUE); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(pauline_call))==TRUE); - linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); + linphone_core_accept_call(pauline->lc, pauline_call); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); linphone_core_terminate_call(marie->lc, out_call); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); +end: linphone_call_unref(out_call); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1918,8 +2035,8 @@ static void video_call_limited_bandwidth(void) { /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1930,6 +2047,8 @@ static void video_call_limited_bandwidth(void) { static void _call_with_media_relay(bool_t random_ports) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + bool_t call_ok; + linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL); @@ -1940,18 +2059,19 @@ static void _call_with_media_relay(bool_t random_ports) { linphone_core_set_video_port(pauline->lc,-1); } - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; liblinphone_tester_check_rtcp(pauline,marie); #ifdef VIDEO_ENABLED - CU_ASSERT_TRUE(add_video(pauline,marie)); + BC_ASSERT_TRUE(add_video(pauline,marie, TRUE)); liblinphone_tester_check_rtcp(pauline,marie); #endif /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1973,47 +2093,51 @@ static void call_with_privacy(void) { params=linphone_core_create_default_call_parameters(pauline->lc); linphone_call_params_set_privacy(params,LinphonePrivacyId); - CU_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); + BC_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); linphone_call_params_destroy(params); c1=linphone_core_get_current_call(pauline->lc); c2=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); + if (c1 && c2){ + /*make sure local identity is unchanged*/ + BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_log_get_from(linphone_call_get_call_log(c1)),pauline->identity)); - /*make sure local identity is unchanged*/ - CU_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_log_get_from(linphone_call_get_call_log(c1)),pauline->identity)); + /*make sure remote identity is hidden*/ + BC_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - /*make sure remote identity is hidden*/ - CU_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - - CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId); + BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); + } /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); /*test proxy config privacy*/ linphone_core_get_default_proxy(pauline->lc,&pauline_proxy); linphone_proxy_config_set_privacy(pauline_proxy,LinphonePrivacyId); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); + c1=linphone_core_get_current_call(pauline->lc); c2=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); + if (c1 && c2){ - /*make sure remote identity is hidden*/ - CU_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); + /*make sure remote identity is hidden*/ + BC_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId); + BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); + } /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -2034,46 +2158,47 @@ static void call_with_privacy2(void) { linphone_proxy_config_enable_register(pauline_proxy,FALSE); linphone_proxy_config_done(pauline_proxy); - CU_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); + BC_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); linphone_call_params_destroy(params); c1=linphone_core_get_current_call(pauline->lc); c2=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); - /*make sure local identity is unchanged*/ - CU_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_log_get_from(linphone_call_get_call_log(c1)),pauline->identity)); + if (c1 && c2){ + /*make sure local identity is unchanged*/ + BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_log_get_from(linphone_call_get_call_log(c1)),pauline->identity)); + /*make sure remote identity is hidden*/ + BC_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - /*make sure remote identity is hidden*/ - CU_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - - CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId); + BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); + } /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); /*test proxy config privacy*/ linphone_proxy_config_set_privacy(pauline_proxy,LinphonePrivacyId); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); c1=linphone_core_get_current_call(pauline->lc); c2=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); - /*make sure remote identity is hidden*/ - CU_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); - - CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId); - /*just to sleep*/ + if (c1 && c2){ + /*make sure remote identity is hidden*/ + BC_ASSERT_FALSE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),pauline->identity)); + BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(c2)),LinphonePrivacyId, int, "%d"); + } linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,2)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -2131,12 +2256,11 @@ static void call_with_declined_srtp(void) { if (linphone_core_media_encryption_supported(marie->lc,LinphoneMediaEncryptionSRTP)) { linphone_core_set_media_encryption(pauline->lc,LinphoneMediaEncryptionSRTP); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); - /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } else { ms_warning ("not tested because srtp not available"); } @@ -2144,6 +2268,51 @@ static void call_with_declined_srtp(void) { linphone_core_manager_destroy(pauline); } +static void call_srtp_paused_and_resumed(void) { + /* + * This test was made to evidence a bug due to internal usage of current_params while not yet filled by linphone_call_get_current_params(). + * As a result it must not use the call() function because it calls linphone_call_get_current_params(). + */ + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + const LinphoneCallParams *params; + LinphoneCall *pauline_call; + + if (!linphone_core_media_encryption_supported(marie->lc,LinphoneMediaEncryptionSRTP)) goto end; + linphone_core_set_media_encryption(pauline->lc,LinphoneMediaEncryptionSRTP); + + linphone_core_invite_address(pauline->lc, marie->identity); + + if (!BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1))) goto end; + pauline_call = linphone_core_get_current_call(pauline->lc); + linphone_core_accept_call(marie->lc, linphone_core_get_current_call(marie->lc)); + + if (!BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1))) goto end; + if (!BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1))) goto end; + + linphone_core_pause_call(pauline->lc, pauline_call); + + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); + + linphone_core_resume_call(pauline->lc, pauline_call); + if (!BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2))) goto end; + if (!BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2))) goto end; + + /*assert that after pause and resume, SRTP is still being used*/ + params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)); + BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(params) == LinphoneMediaEncryptionSRTP); + params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(params) == LinphoneMediaEncryptionSRTP); + + linphone_core_terminate_all_calls(marie->lc); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + static void on_eof(LinphonePlayer *player, void *user_data){ LinphoneCoreManager *marie=(LinphoneCoreManager*)user_data; marie->stat.number_of_player_eof++; @@ -2155,11 +2324,12 @@ static void call_with_file_player(void) { LinphonePlayer *player; char hellopath[256]; char *recordpath = create_filepath(bc_tester_writable_dir_prefix, "record-call_with_file_player", "wav"); + bool_t call_ok; /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ unlink(recordpath); - snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", bc_tester_read_dir_prefix); + snprintf(hellopath,sizeof(hellopath), "%s/sounds/ahbahouaismaisbon.wav", bc_tester_read_dir_prefix); /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ linphone_core_use_files(marie->lc,TRUE); @@ -2170,38 +2340,39 @@ static void call_with_file_player(void) { linphone_core_set_play_file(pauline->lc,NULL); linphone_core_set_record_file(pauline->lc,recordpath); - CU_ASSERT_TRUE(call(marie,pauline)); - + BC_ASSERT_TRUE((call_ok=call(marie,pauline))); + if (!call_ok) goto end; player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_PTR_NOT_NULL(player); + BC_ASSERT_PTR_NOT_NULL(player); if (player){ - CU_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); - CU_ASSERT_TRUE(linphone_player_start(player)==0); + BC_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==0); + BC_ASSERT_TRUE(linphone_player_start(player)==0); } - /* This assert should be modified to be at least as long as the hello8000.wav file */ - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,23000)); + /* This assert should be modified to be at least as long as the WAV file */ + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,10000)); /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); /*cannot run on iphone simulator because locks main loop beyond permitted time (should run on another thread) */ #if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) { double similar; - const double threshold = 0.9; - CU_ASSERT_TRUE(ms_audio_diff(hellopath,recordpath,&similar,NULL,NULL)==0); - CU_ASSERT_TRUE(similar>threshold); - CU_ASSERT_TRUE(similar<=1.0); - if(similar > threshold && similar <=1.0) { + const int threshold = 90; + BC_ASSERT_EQUAL(ms_audio_diff(hellopath,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); + BC_ASSERT_GREATER(100*similar, threshold, int, "%d"); + BC_ASSERT_LOWER(100*similar, 100, int, "%d"); + if (threshold < 100*similar && 100*similar < 100) { remove(recordpath); } } #else remove(recordpath); #endif +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); ms_free(recordpath); @@ -2222,6 +2393,7 @@ static void call_with_mkv_file_player(void) { char hellomkv[256]; char hellowav[256]; char *recordpath; + bool_t call_ok; #if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) double similar; const double threshold = 0.9; @@ -2247,30 +2419,30 @@ static void call_with_mkv_file_player(void) { linphone_core_set_play_file(pauline->lc,hellowav); /*just to send something but we are not testing what is sent by pauline*/ linphone_core_set_record_file(pauline->lc,recordpath); - CU_ASSERT_TRUE(call(marie,pauline)); - + BC_ASSERT_TRUE((call_ok=call(marie,pauline))); + if (!call_ok) goto end; player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_PTR_NOT_NULL(player); + BC_ASSERT_PTR_NOT_NULL(player); if (player){ int res = linphone_player_open(player,hellomkv,on_eof,marie); if(!ms_filter_codec_supported("opus")) { - CU_ASSERT_EQUAL(res, -1); + BC_ASSERT_EQUAL(res, -1, int, "%d"); goto end; } - CU_ASSERT_EQUAL(res, 0); - CU_ASSERT_TRUE(linphone_player_start(player)==0); - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); + BC_ASSERT_EQUAL(res, 0, int, "%d"); + BC_ASSERT_TRUE(linphone_player_start(player)==0); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); linphone_player_close(player); } /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); #ifdef DO_AUDIO_CMP - CU_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,NULL,NULL)==0); - CU_ASSERT_TRUE(similar>threshold); - CU_ASSERT_TRUE(similar<=1.0); + BC_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,audio_cmp_max_shift,NULL,NULL)==0); + BC_ASSERT_TRUE(similar>threshold); + BC_ASSERT_TRUE(similar<=1.0); if(similar>threshold && similar<=1.0) { remove(recordpath); } @@ -2289,6 +2461,8 @@ end: void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel, const char *marie_rc, const char *pauline_rc) { LinphoneCoreManager* marie = linphone_core_manager_new(marie_rc); LinphoneCoreManager* pauline = linphone_core_manager_new(pauline_rc); + bool_t call_ok; + if (enable_relay) { linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL); @@ -2308,7 +2482,7 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video linphone_core_iterate(marie->lc); ms_usleep(200000); } - CU_ASSERT_TRUE(linphone_tunnel_connected(linphone_core_get_tunnel(marie->lc))); + BC_ASSERT_TRUE(linphone_tunnel_connected(linphone_core_get_tunnel(marie->lc))); } if (linphone_core_media_encryption_supported(marie->lc,mode)) { @@ -2320,12 +2494,10 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video } linphone_core_set_firewall_policy(marie->lc,policy); - linphone_core_set_stun_server(marie->lc,"stun.linphone.org"); linphone_core_set_firewall_policy(pauline->lc,policy); - linphone_core_set_stun_server(pauline->lc,"stun.linphone.org"); - - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); + if (!call_ok) goto end; if (linphone_core_get_media_encryption(pauline->lc) == LinphoneMediaEncryptionZRTP && linphone_core_get_media_encryption(pauline->lc) == LinphoneMediaEncryptionZRTP) { /*wait for SAS*/ @@ -2335,7 +2507,7 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video && linphone_call_get_authentication_token(linphone_core_get_current_call(marie->lc))) { /*check SAS*/ - CU_ASSERT_STRING_EQUAL(linphone_call_get_authentication_token(linphone_core_get_current_call(pauline->lc)) + BC_ASSERT_STRING_EQUAL(linphone_call_get_authentication_token(linphone_core_get_current_call(pauline->lc)) ,linphone_call_get_authentication_token(linphone_core_get_current_call(marie->lc))); liblinphone_tester_check_rtcp(pauline,marie); break; @@ -2349,7 +2521,7 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video if (policy == LinphonePolicyUseIce){ int i=0; - CU_ASSERT_TRUE(check_ice(pauline,marie,enable_tunnel?LinphoneIceStateReflexiveConnection:LinphoneIceStateHostConnection)); + BC_ASSERT_TRUE(check_ice(pauline,marie,enable_tunnel?LinphoneIceStateReflexiveConnection:LinphoneIceStateHostConnection)); for (i=0;i<100;i++) { /*fixme to workaround a crash*/ ms_usleep(20000); linphone_core_iterate(marie->lc); @@ -2359,13 +2531,13 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video #ifdef VIDEO_ENABLED if (enable_video) { if (linphone_core_video_supported(marie->lc)) { - add_video(pauline,marie); + add_video(pauline,marie, TRUE); if (policy == LinphonePolicyUseIce) - CU_ASSERT_TRUE(check_ice(pauline,marie,enable_tunnel?LinphoneIceStateReflexiveConnection:LinphoneIceStateHostConnection)); + BC_ASSERT_TRUE(check_ice(pauline,marie,enable_tunnel?LinphoneIceStateReflexiveConnection:LinphoneIceStateHostConnection)); liblinphone_tester_check_rtcp(marie,pauline); /*wait for ice to found the direct path*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_IframeDecoded,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_IframeDecoded,1)); } else { ms_warning ("not tested because video not available"); } @@ -2375,11 +2547,12 @@ void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } else { ms_warning ("not tested because %s not available", linphone_media_encryption_to_string(mode)); } +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -2416,20 +2589,20 @@ static void early_media_call(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_early_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingEarlyMedia,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingEarlyMedia,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1, int, "%d"); wait_for_until(pauline->lc,marie->lc,NULL,0,1000); /*added because a bug related to early-media caused the Connected state to be reached two times*/ - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected,1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected,1, int, "%d"); /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); @@ -2456,8 +2629,8 @@ static void early_media_call_with_ringing(void){ marie_call = linphone_core_invite_address(marie->lc, pauline->identity); marie_call_log = linphone_call_get_call_log(marie_call); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); if (linphone_core_inc_invite_pending(pauline->lc)) { @@ -2465,18 +2638,18 @@ static void early_media_call_with_ringing(void){ linphone_core_accept_early_media(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); liblinphone_tester_check_rtcp(marie, pauline); linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); connected_time=ms_get_cur_time_ms(); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - CU_ASSERT_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); liblinphone_tester_check_rtcp(marie, pauline); /*just to have a call duration !=0*/ @@ -2484,10 +2657,10 @@ static void early_media_call_with_ringing(void){ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); ended_time=ms_get_cur_time_ms(); - CU_ASSERT_TRUE( labs((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time)) <=1000 ); + BC_ASSERT_TRUE( labs((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time)) <=1000 ); ms_list_free(lcs); } @@ -2514,14 +2687,17 @@ static void early_media_call_with_update_base(bool_t media_change){ marie_call = linphone_core_invite_address(marie->lc, pauline->identity); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); - /* send a 183 to initiate the early media */ - linphone_core_accept_early_media(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,5000)); pauline_call = linphone_core_get_current_call(pauline->lc); + if (!pauline_call) goto end; + /* send a 183 to initiate the early media */ + linphone_core_accept_early_media(pauline->lc, pauline_call); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,1000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,5000) ); + + pauline_params = linphone_call_params_copy(linphone_call_get_current_params(pauline_call)); if (media_change) { @@ -2532,34 +2708,34 @@ static void early_media_call_with_update_base(bool_t media_change){ linphone_call_params_set_session_name(pauline_params,UPDATED_SESSION_NAME); linphone_core_update_call(pauline->lc, pauline_call, pauline_params); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEarlyUpdating,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallEarlyUpdatedByRemote,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEarlyUpdating,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallEarlyUpdatedByRemote,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000)); /*just to wait 2s*/ liblinphone_tester_check_rtcp(marie, pauline); - CU_ASSERT_STRING_EQUAL( linphone_call_params_get_session_name(linphone_call_get_remote_params(marie_call)) + BC_ASSERT_STRING_EQUAL( linphone_call_params_get_session_name(linphone_call_get_remote_params(marie_call)) , UPDATED_SESSION_NAME); linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallConnected, 1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallConnected, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); liblinphone_tester_check_rtcp(marie, pauline); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); +end: ms_list_free(lcs); - linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -2574,9 +2750,9 @@ static void early_media_call_with_codec_update(void){ static void check_call_state(LinphoneCoreManager* mgr,LinphoneCallState state) { - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(mgr->lc)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(mgr->lc)); if (linphone_core_get_current_call(mgr->lc)) - CU_ASSERT_EQUAL(linphone_call_get_state(linphone_core_get_current_call(mgr->lc)),state); + BC_ASSERT_EQUAL(linphone_call_get_state(linphone_core_get_current_call(mgr->lc)),state, int, "%d"); } static void call_established_with_rejected_info(void) { @@ -2585,7 +2761,7 @@ static void call_established_with_rejected_info(void) { int dummy=0; bool_t call_ok=FALSE; - CU_ASSERT_TRUE((call_ok=call(pauline,marie))); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (call_ok){ sal_enable_unconditional_answer(marie->lc->sal,TRUE); @@ -2596,16 +2772,16 @@ static void call_established_with_rejected_info(void) { sal_enable_unconditional_answer(marie->lc->sal,FALSE); linphone_call_send_info_message(linphone_core_get_current_call(pauline->lc),linphone_core_create_info_message(pauline->lc)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_inforeceived,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_inforeceived,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_inforeceived,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_inforeceived,1, int, "%d"); check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); @@ -2618,7 +2794,7 @@ static void call_established_with_rejected_reinvite(void) { LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); bool_t call_ok=FALSE; - CU_ASSERT_TRUE(call_ok=call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); if (call_ok){ linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMU",8000,1),FALSE); /*disable PCMU*/ linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMA",8000,1),TRUE); /*enable PCMA*/ @@ -2629,18 +2805,18 @@ static void call_established_with_rejected_reinvite(void) { ,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonNotAcceptable); + BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonNotAcceptable, int, "%d"); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallStreamsRunning,1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallStreamsRunning,1, int, "%d"); check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); @@ -2652,7 +2828,7 @@ static void call_established_with_rejected_incoming_reinvite(void) { LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); bool_t call_ok=FALSE; - CU_ASSERT_TRUE((call_ok=call(pauline,marie))); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (call_ok){ @@ -2667,19 +2843,19 @@ static void call_established_with_rejected_incoming_reinvite(void) { ,linphone_call_get_current_params(linphone_core_get_current_call(marie->lc))); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(marie->lc)),LinphoneReasonNotAcceptable); + BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(marie->lc)),LinphoneReasonNotAcceptable, int, "%d"); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallStreamsRunning,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallStreamsRunning,1, int, "%d"); check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); @@ -2703,7 +2879,7 @@ static void call_redirect(void){ marie_call = linphone_core_invite_address(marie->lc, pauline->identity); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,6000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,6000)); if (linphone_core_get_current_call(pauline->lc)){ margaux_url = linphone_address_as_string(laure->identity); @@ -2711,25 +2887,25 @@ static void call_redirect(void){ ms_free(margaux_url); /* laure should be ringing now */ - CU_ASSERT_TRUE(wait_for_list(lcs, &laure->stat.number_of_LinphoneCallIncomingReceived,1,6000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &laure->stat.number_of_LinphoneCallIncomingReceived,1,6000)); /* pauline should have ended the call */ - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEnd,1,1000)); /* the call should still be ringing on marie's side */ - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging, 1,1000)); linphone_core_accept_call(laure->lc, linphone_core_get_current_call(laure->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &laure->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &laure->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - CU_ASSERT_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); liblinphone_tester_check_rtcp(marie, laure); linphone_core_terminate_all_calls(laure->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,5000)); } ms_list_free(lcs); @@ -2745,7 +2921,7 @@ static void call_established_with_rejected_reinvite_with_error(void) { LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); bool_t call_ok=TRUE; - CU_ASSERT_TRUE((call_ok=call(pauline,marie))); + BC_ASSERT_TRUE((call_ok=call(pauline,marie))); if (call_ok){ linphone_core_enable_payload_type(pauline->lc,linphone_core_find_payload_type(pauline->lc,"PCMA",8000,1),TRUE); /*add PCMA*/ @@ -2757,18 +2933,18 @@ static void call_established_with_rejected_reinvite_with_error(void) { ,linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable); /*might be change later*/ + BC_ASSERT_EQUAL(linphone_call_get_reason(linphone_core_get_current_call(pauline->lc)),LinphoneReasonTemporarilyUnavailable, int, "%d"); /*might be change later*/ - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallStreamsRunning,1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallStreamsRunning,1, int, "%d"); check_call_state(pauline,LinphoneCallStreamsRunning); check_call_state(marie,LinphoneCallStreamsRunning); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); } linphone_core_manager_destroy(marie); @@ -2791,19 +2967,19 @@ static void call_rejected_because_wrong_credentials_with_params(const char* user linphone_core_add_auth_info(marie->lc,wrong_auth_info); } - CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(marie->lc,marie->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(marie->lc,marie->identity)); result=wait_for(marie->lc,marie->lc,&marie->stat.number_of_auth_info_requested,1); if (enable_auth_req_cb) { - CU_ASSERT_TRUE(result); + BC_ASSERT_TRUE(result); /*automatically re-inititae the call*/ linphone_core_add_auth_info(marie->lc,wrong_auth_info); } - CU_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCallError,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCallError,1)); if (enable_auth_req_cb) { - CU_ASSERT_EQUAL(marie->stat.number_of_auth_info_requested,2); + BC_ASSERT_EQUAL(marie->stat.number_of_auth_info_requested,2, int, "%d"); } /*to make sure unregister will work*/ linphone_core_clear_all_auth_info(marie->lc); @@ -2861,103 +3037,106 @@ static void multiple_early_media(void) { linphone_core_invite_address_with_params(pauline->lc,marie1->identity,params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,3000)); pauline_call=linphone_core_get_current_call(pauline->lc); marie1_call=linphone_core_get_current_call(marie1->lc); marie2_call=linphone_core_get_current_call(marie2->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); - CU_ASSERT_PTR_NOT_NULL(marie1_call); - CU_ASSERT_PTR_NOT_NULL(marie2_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(marie1_call); + BC_ASSERT_PTR_NOT_NULL(marie2_call); if (pauline_call && marie1_call && marie2_call){ /*wait a bit that streams are established*/ wait_for_list(lcs,&dummy,1,6000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth>70); linphone_core_accept_call(marie1->lc,linphone_core_get_current_call(marie1->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallStreamsRunning,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallStreamsRunning,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,3000)); /*marie2 should get her call terminated*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); /*wait a bit that streams are established*/ wait_for_list(lcs,&dummy,1,3000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>71); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>71); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>71); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>71); /*send an INFO in reverse side to check that dialogs are properly established*/ info=linphone_core_create_info_message(marie1->lc); linphone_call_send_info_message(marie1_call,info); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_inforeceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_inforeceived,1,3000)); } linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallEnd,1,3000)); ms_list_free(lcs); linphone_core_manager_destroy(marie1); linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(pauline); } +#endif -static void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* lcs,LinphoneMediaDirection audio_dir, LinphoneMediaDirection video_dir) { - CU_ASSERT_PTR_NOT_NULL(call); +void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* lcs,LinphoneMediaDirection audio_dir, LinphoneMediaDirection video_dir) { + BC_ASSERT_PTR_NOT_NULL(call); if (call) { + const LinphoneCallParams *params = linphone_call_get_current_params(call); +#ifdef VIDEO_ENABLED int current_recv_iframe = mgr->stat.number_of_IframeDecoded; int expected_recv_iframe=0; int dummy = 0; - const LinphoneCallParams *params = linphone_call_get_current_params(call); - CU_ASSERT_EQUAL(audio_dir,linphone_call_params_get_audio_direction(params)); - CU_ASSERT_EQUAL(video_dir,linphone_call_params_get_video_direction(params)); + BC_ASSERT_EQUAL(video_dir,linphone_call_params_get_video_direction(params), int, "%d"); linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_cb,mgr->lc); linphone_call_send_vfu_request(call); + wait_for_list(lcs,&dummy,1,2000); /*on some device, it may take 3 to 4s to get audio from mic*/ switch (video_dir) { case LinphoneMediaDirectionInactive: - CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendOnly: expected_recv_iframe = 0; - CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); break; case LinphoneMediaDirectionRecvOnly: - CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendRecv: expected_recv_iframe = 1; break; } - CU_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000)); - + BC_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000)); +#endif + BC_ASSERT_EQUAL(audio_dir,linphone_call_params_get_audio_direction(params), int, "%d"); switch (audio_dir) { case LinphoneMediaDirectionInactive: - CU_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendOnly: - CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); - if (audio_dir == LinphoneMediaDirectionSendOnly) CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000)); + BC_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5); + if (audio_dir == LinphoneMediaDirectionSendOnly) BC_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000)); break; case LinphoneMediaDirectionRecvOnly: - CU_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5); case LinphoneMediaDirectionSendRecv: - CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_download_bandwidth,70,4000)); - if (audio_dir == LinphoneMediaDirectionSendRecv) CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_download_bandwidth,70,4000)); + if (audio_dir == LinphoneMediaDirectionSendRecv) BC_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000)); break; } } } - +#ifdef VIDEO_ENABLED static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, LinphoneCoreManager *marie, MSList *lcs) { #define DEFAULT_WAIT_FOR 10000 LinphoneCallParams *params; @@ -2979,7 +3158,7 @@ static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, Linphone ,pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallIncomingReceived,1,DEFAULT_WAIT_FOR)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallIncomingReceived,1,DEFAULT_WAIT_FOR)); { char* remote_uri = linphone_address_as_string_uri_only(pauline->identity); @@ -2994,8 +3173,8 @@ static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, Linphone linphone_core_accept_call_with_params(marie->lc,call,params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning,1,DEFAULT_WAIT_FOR)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallPausedByRemote,1,DEFAULT_WAIT_FOR)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning,1,DEFAULT_WAIT_FOR)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallPausedByRemote,1,DEFAULT_WAIT_FOR)); check_media_direction(marie,call,lcs,LinphoneMediaDirectionSendOnly,LinphoneMediaDirectionSendOnly); } @@ -3018,7 +3197,6 @@ static void accept_call_in_send_base(bool_t caller_has_ice) { pauline = linphone_core_manager_new("pauline_rc"); if (caller_has_ice) { - linphone_core_set_stun_server(pauline->lc,"stun.linphone.org"); linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); } marie = linphone_core_manager_new("marie_rc"); @@ -3036,7 +3214,7 @@ static void accept_call_in_send_base(bool_t caller_has_ice) { leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3082,7 +3260,7 @@ void two_accepted_call_in_send_only() { leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3136,15 +3314,15 @@ static void record_call(const char *filename, bool_t enableVideo) { filepath = create_filepath(bc_tester_writable_dir_prefix, filename, format); remove(filepath); linphone_call_params_set_record_file(marieParams, filepath); - CU_ASSERT_TRUE(call_succeeded = call_with_params(marie, pauline, marieParams, paulineParams)); - CU_ASSERT_PTR_NOT_NULL(callInst = linphone_core_get_current_call(marie->lc)); + BC_ASSERT_TRUE(call_succeeded = call_with_params(marie, pauline, marieParams, paulineParams)); + BC_ASSERT_PTR_NOT_NULL(callInst = linphone_core_get_current_call(marie->lc)); if ((call_succeeded == TRUE) && (callInst != NULL)) { ms_message("call_recording(): start recording into %s", filepath); linphone_call_start_recording(callInst); wait_for_until(marie->lc,pauline->lc,&dummy,1,5000); linphone_call_stop_recording(callInst); end_call(marie, pauline); - CU_ASSERT_EQUAL(access(filepath, F_OK), 0); + BC_ASSERT_EQUAL(access(filepath, F_OK), 0, int, "%d"); } remove(filepath); ms_free(filepath); @@ -3182,12 +3360,12 @@ static void video_call_snapshot(void) { linphone_call_params_enable_video(marieParams, TRUE); linphone_call_params_enable_video(paulineParams, TRUE); - CU_ASSERT_TRUE(call_succeeded = call_with_params(marie, pauline, marieParams, paulineParams)); - CU_ASSERT_PTR_NOT_NULL(callInst = linphone_core_get_current_call(marie->lc)); + BC_ASSERT_TRUE(call_succeeded = call_with_params(marie, pauline, marieParams, paulineParams)); + BC_ASSERT_PTR_NOT_NULL(callInst = linphone_core_get_current_call(marie->lc)); if((call_succeeded == TRUE) && (callInst != NULL)) { linphone_call_take_video_snapshot(callInst, filename); wait_for_until(marie->lc, pauline->lc, &dummy, 1, 5000); - CU_ASSERT_EQUAL(access(filename, F_OK), 0); + BC_ASSERT_EQUAL(access(filename, F_OK), 0, int, "%d"); remove(filename); } ms_free(filename); @@ -3203,28 +3381,33 @@ static void call_with_in_dialog_update(void) { LinphoneCoreManager* marie; LinphoneCoreManager* pauline; LinphoneCallParams *params; + bool_t call_ok; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; + liblinphone_tester_check_rtcp(marie,pauline); params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc)); params->no_user_consent=TRUE; linphone_core_update_call(marie->lc,linphone_core_get_current_call(marie->lc),params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallUpdatedByRemote,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallUpdatedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); end_call(marie,pauline); + +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3236,13 +3419,16 @@ static void call_with_in_dialog_codec_change_base(bool_t no_sdp) { LinphoneCoreManager* marie; LinphoneCoreManager* pauline; LinphoneCallParams *params; + bool_t call_ok; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; + liblinphone_tester_check_rtcp(marie,pauline); params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc)); @@ -3255,21 +3441,22 @@ static void call_with_in_dialog_codec_change_base(bool_t no_sdp) { } linphone_core_update_call(marie->lc,linphone_core_get_current_call(marie->lc),params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallUpdatedByRemote,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_STRING_EQUAL("PCMA",linphone_payload_type_get_mime_type(linphone_call_params_get_used_audio_codec(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc))))); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallUpdatedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_STRING_EQUAL("PCMA",linphone_payload_type_get_mime_type(linphone_call_params_get_used_audio_codec(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc))))); wait_for_until(marie->lc, pauline->lc, &dummy, 1, 5000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc))->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc))->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); end_call(marie,pauline); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3287,6 +3474,7 @@ static void call_with_custom_supported_tags(void) { LinphoneCoreManager* pauline; const LinphoneCallParams *remote_params; const char *recv_supported; + bool_t call_ok; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); @@ -3295,20 +3483,22 @@ static void call_with_custom_supported_tags(void) { pauline = linphone_core_manager_new( "pauline_rc"); linphone_core_add_supported_tag(marie->lc,"pouet-tag"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call_ok=call(pauline,marie)); + if (!call_ok) goto end; liblinphone_tester_check_rtcp(marie,pauline); remote_params=linphone_call_get_remote_params(linphone_core_get_current_call(pauline->lc)); recv_supported=linphone_call_params_get_custom_header(remote_params,"supported"); - CU_ASSERT_PTR_NOT_NULL(recv_supported); + BC_ASSERT_PTR_NOT_NULL(recv_supported); if (recv_supported){ - CU_ASSERT_TRUE(strstr(recv_supported,"pouet-tag")!=NULL); + BC_ASSERT_TRUE(strstr(recv_supported,"pouet-tag")!=NULL); } end_call(marie,pauline); +end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3322,6 +3512,7 @@ static void call_log_from_taken_from_p_asserted_id(void) { const char* paulie_asserted_id ="\"Paupauche\" "; LinphoneAddress *paulie_asserted_id_addr = linphone_address_new(paulie_asserted_id); LpConfig *marie_lp; + bool_t call_ok; params=linphone_core_create_default_call_parameters(pauline->lc); @@ -3332,24 +3523,26 @@ static void call_log_from_taken_from_p_asserted_id(void) { lp_config_set_int(marie_lp,"sip","call_logs_use_asserted_id_instead_of_from",1); - CU_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); - linphone_call_params_destroy(params); + BC_ASSERT_TRUE(call_ok=call_with_caller_params(pauline,marie,params)); + + if (!call_ok) goto end; c1=linphone_core_get_current_call(pauline->lc); c2=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(c1); - CU_ASSERT_PTR_NOT_NULL(c2); + BC_ASSERT_PTR_NOT_NULL(c1); + BC_ASSERT_PTR_NOT_NULL(c2); /*make sure remote identity is hidden*/ - CU_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),paulie_asserted_id_addr)); + BC_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),paulie_asserted_id_addr)); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); +end: + linphone_call_params_destroy(params); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -3360,12 +3553,12 @@ static void incoming_invite_with_invalid_sdp() { LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; callee_test_params.sdp_simulate_error = TRUE; - CU_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); + BC_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); - CU_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); - CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1); + BC_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); + BC_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1, int, "%d"); /*call will be drop before presented to the application, because it is invalid*/ - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,0); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,0, int, "%d"); linphone_core_manager_destroy(callee); linphone_core_manager_destroy(caller); @@ -3377,14 +3570,14 @@ static void outgoing_invite_with_invalid_sdp() { LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; caller_test_params.sdp_simulate_error = TRUE; - CU_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); + BC_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); - CU_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,1); - CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1); + BC_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,1, int, "%d"); + BC_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1, int, "%d"); // actually callee does not receive error, because it just get a BYE from the other part - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,0); - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallEnd,1); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,0, int, "%d"); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallEnd,1, int, "%d"); linphone_core_manager_destroy(callee); linphone_core_manager_destroy(caller); @@ -3395,35 +3588,35 @@ static void incoming_reinvite_with_invalid_ack_sdp(){ LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); LinphoneCall * inc_call; - CU_ASSERT_TRUE(call(caller,callee)); + BC_ASSERT_TRUE(call(caller,callee)); inc_call = linphone_core_get_current_call(callee->lc); - CU_ASSERT_PTR_NOT_NULL(inc_call); + BC_ASSERT_PTR_NOT_NULL(inc_call); if (inc_call) { const LinphoneCallParams *caller_params; stats initial_caller_stat=caller->stat; stats initial_callee_stat=callee->stat; sal_call_set_sdp_handling(inc_call->op, SalOpSDPSimulateError); /* will force a parse error for the ACK SDP*/ - CU_ASSERT_PTR_NOT_NULL(setup_video(caller, callee)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); + BC_ASSERT_PTR_NOT_NULL(setup_video(caller, callee, TRUE)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); /*Basically the negotiation failed but since the call was already running, we expect it to restore to the previous state so error stats should not be changed*/ - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError, int, "%d"); /*and remote should have received an update notification*/ - CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1); + BC_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1, int, "%d"); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); caller_params = linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,(int*)&caller_params->has_video,FALSE)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,(int*)&caller_params->has_video,FALSE)); sal_call_set_sdp_handling(inc_call->op, SalOpSDPNormal); } linphone_core_terminate_all_calls(caller->lc); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(callee); linphone_core_manager_destroy(caller); @@ -3437,32 +3630,32 @@ static void outgoing_reinvite_with_invalid_ack_sdp() { LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); LinphoneCall * out_call; - CU_ASSERT_TRUE(call(caller,callee)); + BC_ASSERT_TRUE(call(caller,callee)); out_call = linphone_core_get_current_call(caller->lc); - CU_ASSERT_PTR_NOT_NULL(out_call); + BC_ASSERT_PTR_NOT_NULL(out_call); if (out_call) { stats initial_caller_stat=caller->stat; stats initial_callee_stat=callee->stat; sal_call_set_sdp_handling(out_call->op, SalOpSDPSimulateError); /* will force a parse error for the ACK SDP*/ - CU_ASSERT_PTR_NOT_NULL(setup_video(caller, callee)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); + BC_ASSERT_PTR_NOT_NULL(setup_video(caller, callee, TRUE)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); /*Basically the negotiation failed but since the call was already running, we expect it to restore to the previous state so error stats should not be changed*/ - CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError); + BC_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError, int, "%d"); /*and remote should not have received any update notification*/ - CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote); + BC_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote, int, "%d"); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); sal_call_set_sdp_handling(out_call->op, SalOpSDPNormal); } linphone_core_terminate_all_calls(caller->lc); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(callee); linphone_core_manager_destroy(caller); @@ -3485,11 +3678,12 @@ static void call_with_paused_no_sdp_on_resume() { marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); liblinphone_tester_check_rtcp(marie,pauline); call_marie = linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(call_marie); + BC_ASSERT_PTR_NOT_NULL(call_marie); + if (!call_marie) goto end; ms_message("== Call is OK =="); @@ -3498,9 +3692,9 @@ static void call_with_paused_no_sdp_on_resume() { linphone_core_pause_call(marie->lc,call_marie); ms_message("== Call pausing =="); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPaused,1)); /*stay in pause a little while in order to generate traffic*/ wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); @@ -3511,19 +3705,19 @@ static void call_with_paused_no_sdp_on_resume() { linphone_core_resume_call(marie->lc,call_marie); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); wait_for_until(marie->lc, pauline->lc, &dummy, 1, 3000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(call_marie)->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); - + BC_ASSERT_TRUE(linphone_call_get_audio_stats(call_marie)->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); +end: end_call(marie,pauline); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3544,7 +3738,6 @@ static void early_media_without_sdp_in_200_base( bool_t use_video, bool_t use_ic lcs = ms_list_append(lcs,pauline->lc); if (use_ice){ linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce); - linphone_core_set_stun_server(marie->lc, "stun.linphone.org"); } /* Marie calls Pauline, and after the call has rung, transitions to an early_media session @@ -3564,8 +3757,8 @@ static void early_media_without_sdp_in_200_base( bool_t use_video, bool_t use_ic marie_call = linphone_core_invite_address_with_params(marie->lc, pauline->identity, params); marie_call_log = linphone_call_get_call_log(marie_call); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); if (linphone_core_inc_invite_pending(pauline->lc)) { LinphoneCall* pauline_call = linphone_core_get_current_call(pauline->lc); @@ -3573,8 +3766,8 @@ static void early_media_without_sdp_in_200_base( bool_t use_video, bool_t use_ic /* send a 183 to initiate the early media */ linphone_core_accept_early_media(pauline->lc, pauline_call); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); liblinphone_tester_check_rtcp(marie, pauline); @@ -3582,11 +3775,11 @@ static void early_media_without_sdp_in_200_base( bool_t use_video, bool_t use_ic sal_call_set_sdp_handling(pauline_call->op, SalOpSDPSimulateRemove); linphone_core_accept_call(pauline->lc, pauline_call); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); connected_time=ms_get_cur_time_ms(); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,3000)); - CU_ASSERT_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); liblinphone_tester_check_rtcp(marie, pauline); /*just to have a call duration !=0*/ @@ -3594,10 +3787,10 @@ static void early_media_without_sdp_in_200_base( bool_t use_video, bool_t use_ic linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); ended_time=ms_get_cur_time_ms(); - CU_ASSERT_TRUE( labs((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time)) <=1000 ); + BC_ASSERT_TRUE( labs((linphone_call_log_get_duration(marie_call_log)*1000) - (int64_t)(ended_time - connected_time)) <=1000 ); ms_list_free(lcs); } @@ -3641,15 +3834,15 @@ static void call_with_generic_cn(void) { linphone_core_set_record_file(pauline->lc, recorded_file); linphone_core_enable_generic_confort_noise(marie->lc, TRUE); linphone_core_enable_generic_confort_noise(pauline->lc, TRUE); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); if (pauline_call){ const rtp_stats_t *rtps; wait_for_until(marie->lc, pauline->lc, NULL, 0, 8000); rtps=rtp_session_get_stats(pauline_call->audiostream->ms.sessions.rtp_session); - CU_ASSERT_TRUE(rtps->packet_recv<=300 && rtps->packet_recv>=200); + BC_ASSERT_TRUE(rtps->packet_recv<=300 && rtps->packet_recv>=200); } end_call(marie,pauline); @@ -3658,9 +3851,9 @@ static void call_with_generic_cn(void) { int err; err=stat(recorded_file,&stbuf); - CU_ASSERT_EQUAL(err, 0); + BC_ASSERT_EQUAL(err, 0, int, "%d"); if (err==0){ - CU_ASSERT_TRUE(stbuf.st_size>120000); + BC_ASSERT_TRUE(stbuf.st_size>120000); } } @@ -3668,7 +3861,7 @@ static void call_with_generic_cn(void) { linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3722,24 +3915,24 @@ static void call_with_transport_change_base(bool_t succesfull_call) { sip_tr.tls_port = 0; linphone_core_set_sip_transports(marie->lc,&sip_tr); if (succesfull_call) { - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); linphone_core_terminate_all_calls(marie->lc); } else linphone_core_invite(marie->lc,"nexiste_pas"); if (succesfull_call) - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallReleased,1)); if (succesfull_call) { - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallReleased,1)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -3753,12 +3946,13 @@ static void unsucessfull_call_with_transport_change_after_released(void) { } #ifdef VIDEO_ENABLED -static void video_call_with_re_invite_inactive_followed_by_re_invite_base(bool_t no_sdp) { +static void video_call_with_re_invite_inactive_followed_by_re_invite_base(LinphoneMediaEncryption mode, bool_t no_sdp) { int begin; int leaked_objects; LinphoneCoreManager* marie; LinphoneCoreManager* pauline; LinphoneCallParams *params; + const LinphoneCallParams *current_params; MSList *lcs=NULL; belle_sip_object_enable_leak_detector(TRUE); @@ -3773,7 +3967,7 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(bool_t lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,marie->lc); - video_call_base_2(marie,pauline,TRUE,LinphoneMediaEncryptionNone,TRUE,TRUE); + video_call_base_2(marie,pauline,TRUE,mode,TRUE,TRUE); if (linphone_core_get_current_call(marie->lc)) { params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc)); @@ -3783,9 +3977,9 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(bool_t linphone_core_update_call(marie->lc, linphone_core_get_current_call(marie->lc),params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1)); check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionInactive,LinphoneMediaDirectionInactive); check_media_direction(pauline,linphone_core_get_current_call(pauline->lc), lcs, LinphoneMediaDirectionInactive, LinphoneMediaDirectionInactive); @@ -3805,34 +3999,141 @@ static void video_call_with_re_invite_inactive_followed_by_re_invite_base(bool_t linphone_core_resume_call(marie->lc,linphone_core_get_current_call(marie->lc)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallResuming,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallResuming,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionSendRecv,LinphoneMediaDirectionSendRecv); check_media_direction(pauline,linphone_core_get_current_call(pauline->lc),lcs,LinphoneMediaDirectionSendRecv,LinphoneMediaDirectionSendRecv); + /*assert that after pause and resume, SRTP is still being used*/ + current_params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)); + BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(current_params) == mode); + current_params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_TRUE(linphone_call_params_get_media_encryption(current_params) == mode); + } end_call(marie,pauline); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } } static void video_call_with_re_invite_inactive_followed_by_re_invite() { - video_call_with_re_invite_inactive_followed_by_re_invite_base(FALSE); + video_call_with_re_invite_inactive_followed_by_re_invite_base(LinphoneMediaEncryptionNone,FALSE); } static void video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp() { - video_call_with_re_invite_inactive_followed_by_re_invite_base(TRUE); + video_call_with_re_invite_inactive_followed_by_re_invite_base(LinphoneMediaEncryptionNone, TRUE); +} +static void srtp_video_call_with_re_invite_inactive_followed_by_re_invite() { + if (ms_srtp_supported()) + video_call_with_re_invite_inactive_followed_by_re_invite_base(LinphoneMediaEncryptionSRTP,FALSE); + else + ms_message("srtp_video_call_with_re_invite_inactive_followed_by_re_invite skipped, missing srtp support"); +} +static void srtp_video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp() { + if (ms_srtp_supported()) + video_call_with_re_invite_inactive_followed_by_re_invite_base(LinphoneMediaEncryptionSRTP, TRUE); + else + ms_message("srtp_video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp skipped, missing srtp support"); +} +static void video_call_ice_params() { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + + linphone_core_set_firewall_policy(marie->lc,LinphonePolicyUseIce); + linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce); + video_call_base(marie,pauline,FALSE,LinphoneMediaEncryptionNone,TRUE,TRUE); + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); } #endif +static void simple_stereo_call(const char *codec_name, int clock_rate, int bitrate_override) { + int begin; + int leaked_objects; + LinphoneCoreManager* marie; + LinphoneCoreManager* pauline; + PayloadType *pt; + char *stereo_file = ms_strdup_printf("%s/%s",bc_tester_read_dir_prefix,"sounds/vrroom.wav"); + char *recordpath = create_filepath(bc_tester_writable_dir_prefix, "stereo-record", "wav"); + int dummy=0; + + belle_sip_object_enable_leak_detector(TRUE); + begin=belle_sip_object_get_object_count(); + + marie = linphone_core_manager_new( "marie_rc"); + pauline = linphone_core_manager_new( "pauline_rc"); + + /*make sure we have opus*/ + pt = linphone_core_find_payload_type(marie->lc, codec_name, clock_rate, 2); + if (!pt) { + ms_warning("%s not available, stereo with %s not tested.",codec_name, codec_name); + goto end; + } + payload_type_set_recv_fmtp(pt, NULL); /*remove fmtp that by default contain stereo=0*/ + if (bitrate_override) linphone_core_set_payload_type_bitrate(marie->lc, pt, bitrate_override); + pt = linphone_core_find_payload_type(pauline->lc, codec_name, clock_rate, 2); + payload_type_set_recv_fmtp(pt, NULL); + if (bitrate_override) linphone_core_set_payload_type_bitrate(pauline->lc, pt, bitrate_override); + + disable_all_audio_codecs_except_one(marie->lc, codec_name, clock_rate); + disable_all_audio_codecs_except_one(pauline->lc, codec_name, clock_rate); + + linphone_core_set_use_files(marie->lc, TRUE); + linphone_core_set_play_file(marie->lc, stereo_file); + linphone_core_set_use_files(pauline->lc, TRUE); + linphone_core_set_record_file(pauline->lc, recordpath); + + remove(recordpath); + + /*stereo is supported only without volume control, echo canceller...*/ + lp_config_set_string(marie->lc->config,"sound","features","NONE"); + lp_config_set_string(pauline->lc->config,"sound","features","NONE"); + + if (!BC_ASSERT_TRUE(call(marie,pauline))) goto end; + wait_for_until(marie->lc, pauline->lc, &dummy, 1,6000); + end_call(marie,pauline); + + if (clock_rate!=48000) ms_warning("Similarity checking not implemented for files not having the same sampling rate"); + else{ +#if !defined(__arm__) && !defined(__arm64__) && !TARGET_IPHONE_SIMULATOR && !defined(ANDROID) + double similar; + const double threshold = .7f; + BC_ASSERT_EQUAL(ms_audio_diff(stereo_file,recordpath,&similar,audio_cmp_max_shift,NULL,NULL), 0, int, "%d"); + BC_ASSERT_GREATER(similar, threshold, float, "%f"); + BC_ASSERT_LOWER(similar, 1.f, float, "%f"); +#endif + } + + +end: + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + ms_free(stereo_file); + ms_free(recordpath); + + leaked_objects=belle_sip_object_get_object_count()-begin; + BC_ASSERT_TRUE(leaked_objects==0); + if (leaked_objects>0){ + belle_sip_object_dump_active_objects(); + } +} + +static void simple_stereo_call_l16(void){ + simple_stereo_call("L16", 44100, 0); +} + +static void simple_stereo_call_opus(void){ + simple_stereo_call("opus", 48000, 150); +} + test_t call_tests[] = { { "Phone number normalization", phone_number_normalization }, { "Early declined call", early_declined_call }, @@ -3841,6 +4142,7 @@ test_t call_tests[] = { { "Early cancelled call", early_cancelled_call}, { "Call with DNS timeout", call_with_dns_time_out }, { "Cancelled ringing call", cancelled_ringing_call }, + { "Call busy when calling self", call_busy_when_calling_self}, { "Simple call", simple_call }, { "Call with timeouted bye", call_with_timeouted_bye }, { "Direct call over IPv6", direct_call_over_ipv6}, @@ -3871,6 +4173,7 @@ test_t call_tests[] = { { "DTLS SRTP call with media relay", dtls_srtp_call_with_media_realy}, { "ZRTP video call",zrtp_video_call}, { "SRTP call with declined srtp", call_with_declined_srtp }, + { "SRTP call paused and resumed", call_srtp_paused_and_resumed }, { "Call with file player", call_with_file_player}, { "Call with mkv file player", call_with_mkv_file_player}, { "Audio call with ICE no matching audio codecs", audio_call_with_ice_no_matching_audio_codecs }, @@ -3885,6 +4188,7 @@ test_t call_tests[] = { { "SRTP ice video call", srtp_video_ice_call }, { "ZRTP ice video call", zrtp_video_ice_call }, { "Call with video added", call_with_video_added }, + { "Call with video added 2", call_with_video_added_2 }, { "Call with video added (random ports)", call_with_video_added_random_ports }, { "Call with several video switches", call_with_several_video_switches }, { "SRTP call with several video switches", srtp_call_with_several_video_switches }, @@ -3893,6 +4197,10 @@ test_t call_tests[] = { { "Call with multiple early media", multiple_early_media }, { "Call with ICE from video to non-video", call_with_ice_video_to_novideo}, { "Call with ICE and video added", call_with_ice_video_added }, + { "Call with ICE and video added 2", call_with_ice_video_added_2 }, + { "Call with ICE and video added 3", call_with_ice_video_added_3 }, + { "Call with ICE and video added and refused", call_with_ice_video_added_and_refused }, + { "Video call with ICE accepted using call params",video_call_ice_params}, { "Video call recording", video_call_recording_test }, { "Snapshot", video_call_snapshot }, { "Video call with early media and no matching audio codecs", video_call_with_early_media_no_matching_audio_codecs }, @@ -3905,7 +4213,9 @@ test_t call_tests[] = { { "2 Video call accepted in send only", two_accepted_call_in_send_only}, { "Video call with re-invite(inactive) followed by re-invite", video_call_with_re_invite_inactive_followed_by_re_invite}, { "Video call with re-invite(inactive) followed by re-invite(no sdp)", video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp}, -#endif + { "SRTP Video call with re-invite(inactive) followed by re-invite", srtp_video_call_with_re_invite_inactive_followed_by_re_invite}, + { "SRTP Video call with re-invite(inactive) followed by re-invite(no sdp)", srtp_video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp}, + #endif { "SRTP ice call", srtp_ice_call }, { "ZRTP ice call", zrtp_ice_call }, { "ZRTP ice call with relay", zrtp_ice_call_with_relay}, @@ -3943,8 +4253,9 @@ test_t call_tests[] = { { "Outgoing REINVITE with invalid SDP in ACK",outgoing_reinvite_with_invalid_ack_sdp}, { "Call with generic CN", call_with_generic_cn }, { "Call with transport change after released", call_with_transport_change_after_released }, - { "Unsuccessful call with transport change after released",unsucessfull_call_with_transport_change_after_released} - + { "Unsuccessful call with transport change after released",unsucessfull_call_with_transport_change_after_released}, + { "Simple stereo call with L16", simple_stereo_call_l16 }, + { "Simple stereo call with opus", simple_stereo_call_opus } }; test_suite_t call_test_suite = { diff --git a/tester/common/bc_tester_utils.c b/tester/common/bc_tester_utils.c index 077ec0569..7c47dc25f 100644 --- a/tester/common/bc_tester_utils.c +++ b/tester/common/bc_tester_utils.c @@ -22,8 +22,9 @@ along with this program. If not, see . #include "bc_tester_utils.h" -#include #include + +#include "CUnit/Basic.h" #include "CUnit/Automated.h" #if WINAPI_FAMILY_PHONE_APP @@ -41,6 +42,9 @@ const char *bc_tester_writable_dir_prefix = "/data/data/org.linphone.tester/cach const char *bc_tester_writable_dir_prefix = "."; #endif +int bc_printf_verbosity_info; +int bc_printf_verbosity_error; + static test_suite_t **test_suite = NULL; static int nb_test_suites = 0; @@ -54,10 +58,8 @@ int xml_enabled = 0; char * suite_name; char * test_name; void (*tester_printf_va)(int level, const char *fmt, va_list args); -int verbosity_info; -int verbosity_error; -static void tester_printf(int level, const char *fmt, ...) { +void bc_tester_printf(int level, const char *fmt, ...) { va_list args; va_start (args, fmt); tester_printf_va(level, fmt, args); @@ -115,7 +117,7 @@ int bc_tester_nb_tests(const char *suite_name) { void bc_tester_list_suites() { int j; for(j=0;jpName); + bc_tester_printf(bc_printf_verbosity_error,"Suite initialization failed for [%s]", pSuite->pName); } static void suite_cleanup_failure_message_handler(const CU_pSuite pSuite) { - tester_printf(verbosity_error,"Suite cleanup failed for [%s]", pSuite->pName); + bc_tester_printf(bc_printf_verbosity_error,"Suite cleanup failed for [%s]", pSuite->pName); } #ifdef HAVE_CU_GET_SUITE static void suite_start_message_handler(const CU_pSuite pSuite) { - tester_printf(verbosity_info,"Suite [%s] started", pSuite->pName); + bc_tester_printf(bc_printf_verbosity_info,"Suite [%s] started\n", pSuite->pName); } static void suite_complete_message_handler(const CU_pSuite pSuite, const CU_pFailureRecord pFailure) { - tester_printf(verbosity_info,"Suite [%s] ended", pSuite->pName); + bc_tester_printf(bc_printf_verbosity_info,"Suite [%s] ended\n", pSuite->pName); } static void test_start_message_handler(const CU_pTest pTest, const CU_pSuite pSuite) { - tester_printf(verbosity_info,"Suite [%s] Test [%s] started", pSuite->pName,pTest->pName); + bc_tester_printf(bc_printf_verbosity_info,"Suite [%s] Test [%s] started", pSuite->pName,pTest->pName); } /*derivated from cunit*/ @@ -176,7 +178,7 @@ static void test_complete_message_handler(const CU_pTest pTest, } else { strncat(result, " passed", strlen(" passed")); } - tester_printf(verbosity_info,"%s\n", result); + bc_tester_printf(bc_printf_verbosity_info,"%s\n", result); } #endif @@ -206,26 +208,26 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) { #ifndef HAVE_CU_GET_SUITE if( suite_name ){ - tester_printf(verbosity_info, "Tester compiled without CU_get_suite() function, running all tests instead of suite '%s'", suite_name); + bc_tester_printf(bc_printf_verbosity_info, "Tester compiled without CU_get_suite() function, running all tests instead of suite '%s'", suite_name); } #else if (suite_name){ CU_pSuite suite; suite=CU_get_suite(suite_name); if (!suite) { - tester_printf(verbosity_error, "Could not find suite '%s'. Available suites are:", suite_name); + bc_tester_printf(bc_printf_verbosity_error, "Could not find suite '%s'. Available suites are:", suite_name); bc_tester_list_suites(); return -1; } else if (test_name) { CU_pTest test=CU_get_test_by_name(test_name, suite); if (!test) { - tester_printf(verbosity_error, "Could not find test '%s' in suite '%s'. Available tests are:", test_name, suite_name); + bc_tester_printf(bc_printf_verbosity_error, "Could not find test '%s' in suite '%s'. Available tests are:", test_name, suite_name); // do not use suite_name here, since this method is case sensitive bc_tester_list_tests(suite->pName); return -2; } else { CU_ErrorCode err= CU_run_test(suite, test); - if (err != CUE_SUCCESS) tester_printf(verbosity_error, "CU_basic_run_test error %d", err); + if (err != CUE_SUCCESS) bc_tester_printf(bc_printf_verbosity_error, "CU_basic_run_test error %d", err); } } else { CU_run_suite(suite); @@ -253,7 +255,7 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) { void bc_tester_helper(const char *name, const char* additionnal_helper) { - tester_printf(verbosity_info,"%s --help\n" + bc_tester_printf(bc_printf_verbosity_info,"%s --help\n" "\t\t\t--list-suites\n" "\t\t\t--list-tests \n" "\t\t\t--suite \n" @@ -271,8 +273,8 @@ void bc_tester_helper(const char *name, const char* additionnal_helper) { void bc_tester_init(void (*ftester_printf)(int level, const char *fmt, va_list args), int iverbosity_info, int iverbosity_error) { tester_printf_va = ftester_printf; - verbosity_error = iverbosity_error; - verbosity_info = iverbosity_info; + bc_printf_verbosity_error = iverbosity_error; + bc_printf_verbosity_info = iverbosity_info; } int bc_tester_parse_args(int argc, char **argv, int argid) @@ -301,12 +303,12 @@ int bc_tester_parse_args(int argc, char **argv, int argid) } else if (strcmp(argv[i], "--xml") == 0){ xml_enabled = 1; }else { - tester_printf(verbosity_error, "Unknown option \"%s\"\n", argv[i]); + bc_tester_printf(bc_printf_verbosity_error, "Unknown option \"%s\"\n", argv[i]); return -1; } if( xml_enabled && (suite_name || test_name) ){ - tester_printf(verbosity_error, "Cannot use both XML and specific test suite\n"); + bc_tester_printf(bc_printf_verbosity_error, "Cannot use both XML and specific test suite\n"); return -1; } @@ -346,7 +348,7 @@ void bc_tester_uninit() { } CU_cleanup_registry(); /*add missing final newline*/ - tester_printf(verbosity_info,""); + bc_tester_printf(bc_printf_verbosity_info,""); if( xml_enabled ){ /*create real xml file only if tester did not crash*/ @@ -363,3 +365,13 @@ void bc_tester_uninit() { nb_test_suites = 0; } } + +char * bc_tester_res(const char *name) { + char* file = NULL; + if (name) { + size_t len = strlen(bc_tester_read_dir_prefix) + 1 + strlen(name) + 1; + file = malloc(len); + snprintf(file, len, "%s/%s", bc_tester_read_dir_prefix, name); + } + return file; +} diff --git a/tester/common/bc_tester_utils.h b/tester/common/bc_tester_utils.h index ef14d98fd..a0e95884a 100644 --- a/tester/common/bc_tester_utils.h +++ b/tester/common/bc_tester_utils.h @@ -20,13 +20,20 @@ #ifndef TESTER_UTILS_H #define TESTER_UTILS_H -#include "CUnit/Basic.h" +#include #include +#include +#include extern const char *bc_tester_read_dir_prefix; extern const char *bc_tester_writable_dir_prefix; +extern int bc_printf_verbosity_info; +extern int bc_printf_verbosity_error; + typedef void (*test_function_t)(void); +typedef int (*init_function_t)(void); +typedef int (*cleanup_function_t)(void); typedef int (*test_suite_function_t)(const char *name); typedef struct { @@ -36,8 +43,8 @@ typedef struct { typedef struct { const char *name; - CU_InitializeFunc init_func; - CU_CleanupFunc cleanup_func; + init_function_t init_func; + cleanup_function_t cleanup_func; int nb_tests; test_t *tests; } test_suite_t; @@ -60,6 +67,7 @@ int bc_tester_parse_args(int argc, char** argv, int argid); int bc_tester_start(); void bc_tester_add_suite(test_suite_t *suite); void bc_tester_uninit(); +void bc_tester_printf(int level, const char *fmt, ...); int bc_tester_nb_suites(); int bc_tester_nb_tests(const char* name); @@ -71,6 +79,72 @@ int bc_tester_run_suite(test_suite_t *suite); int bc_tester_run_tests(const char *suite_name, const char *test_name); int bc_tester_suite_index(const char *suite_name); + +/** + * Get full path to the given resource + * + * @param name relative resource path (relative to bc_tester_writable_dir_prefix) + * @return path to the resource. Must be freed by caller. +*/ +char * bc_tester_res(const char *name); + + +/*Redefine the CU_... macros WITHOUT final ';' semicolon, to allow IF conditions and with smarter error message */ +extern int CU_assertImplementation(int bValue, + unsigned int uiLine, + const char *strCondition, + const char *strFile, + const char *strFunction, + int bFatal); + +#define _BC_ASSERT(pred, format, fatal) CU_assertImplementation(pred, __LINE__, format, __FILE__, "", fatal) +#define _BC_ASSERT_PRED(name, pred, actual, expected, type, fatal, ...) \ + do { \ + char format[4096] = {0}; \ + type cactual = (actual); \ + type cexpected = (expected); \ + snprintf(format, 4096, name "(" #actual ", " #expected ") - " __VA_ARGS__); \ + _BC_ASSERT(pred, format, fatal); \ + } while (0) +#define BC_PASS(msg) _BC_ASSERT(TRUE, "BC_PASS(" #msg ").", FALSE) +#define BC_FAIL(msg) _BC_ASSERT(FALSE, "BC_FAIL(" #msg ").", FALSE) +#define BC_ASSERT(value) _BC_ASSERT((value), #value, FALSE) +#define BC_ASSERT_FATAL(value) _BC_ASSERT((value), #value, TRUE) +#define BC_TEST(value) _BC_ASSERT((value), #value, FALSE) +#define BC_TEST_FATAL(value) _BC_ASSERT((value), #value, TRUE) +#define BC_ASSERT_TRUE(value) _BC_ASSERT((value), ("BC_ASSERT_TRUE(" #value ")"), FALSE) +#define BC_ASSERT_TRUE_FATAL(value) _BC_ASSERT((value), ("BC_ASSERT_TRUE_FATAL(" #value ")"), TRUE) +#define BC_ASSERT_FALSE(value) _BC_ASSERT(!(value), ("BC_ASSERT_FALSE(" #value ")"), FALSE) +#define BC_ASSERT_FALSE_FATAL(value) _BC_ASSERT(!(value), ("BC_ASSERT_FALSE_FATAL(" #value ")"), TRUE) +#define BC_ASSERT_EQUAL(actual, expected, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_EQUAL", ((cactual) == (cexpected)), actual, expected, type, FALSE, "Expected " type_format " but was " type_format ".", cexpected, cactual) +#define BC_ASSERT_EQUAL_FATAL(actual, expected, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_EQUAL_FATAL", ((cactual) == (cexpected)), actual, expected, type, TRUE, "Expected " type_format " but was " type_format ".", cexpected, cactual) +#define BC_ASSERT_NOT_EQUAL(actual, expected, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_NOT_EQUAL", ((cactual) != (cexpected)), actual, expected, type, FALSE, "Expected NOT " type_format " but it was.", cexpected) +#define BC_ASSERT_NOT_EQUAL_FATAL(actual, expected, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_NOT_EQUAL_FATAL", ((cactual) != (cexpected)), actual, expected, type, TRUE, "Expected NOT " type_format " but it was.", cexpected) +#define BC_ASSERT_PTR_EQUAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_PTR_EQUAL", ((cactual) == (cexpected)), (const void*)(actual), (const void*)(expected), const void*, FALSE, "Expected %p but was %p.", cexpected, cactual) +#define BC_ASSERT_PTR_EQUAL_FATAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_PTR_EQUAL_FATAL", ((cactual) == (cexpected)), (const void*)(actual), (const void*)(expected), const void*, TRUE, "Expected %p but was %p.", cexpected, cactual) +#define BC_ASSERT_PTR_NOT_EQUAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_PTR_NOT_EQUAL", ((cactual) != (cexpected)), (const void*)(actual), (const void*)(expected), const void*, FALSE, "Expected NOT %p but it was.", cexpected) +#define BC_ASSERT_PTR_NOT_EQUAL_FATAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_PTR_NOT_EQUAL_FATAL", ((cactual) != (cexpected)), (const void*)(actual), (const void*)(expected), const void*, TRUE, "Expected NOT %p but it was.", cexpected) +#define BC_ASSERT_PTR_NULL(value) _BC_ASSERT_PRED("BC_ASSERT_PTR_NULL", ((cactual) == (cexpected)), (const void*)(value), (const void*)NULL, const void*, FALSE, "Expected NULL but was %p.", cactual) +#define BC_ASSERT_PTR_NULL_FATAL(value) _BC_ASSERT_PRED("BC_ASSERT_PTR_NULL_FATAL", ((cactual) == (cexpected)), (const void*)(value), (const void*)NULL, const void*, TRUE, "Expected NULL but was %p.", cactual) +#define BC_ASSERT_PTR_NOT_NULL(value) _BC_ASSERT_PRED("BC_ASSERT_PTR_NOT_NULL", ((cactual) != (cexpected)), (const void*)(value), (const void*)NULL, const void*, FALSE, "Expected NOT NULL but it was.") +#define BC_ASSERT_PTR_NOT_NULL_FATAL(value) _BC_ASSERT_PRED("BC_ASSERT_PTR_NOT_NULL_FATAL", ((cactual) != (cexpected)), (const void*)(value), (const void*)NULL, const void*, TRUE, "Expected NOT NULL but it was.") +#define BC_ASSERT_STRING_EQUAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_STRING_EQUAL", !(strcmp((const char*)(cactual), (const char*)(cexpected))), actual, expected, const char*, FALSE, "Expected %s but was %s.", cexpected, cactual) +#define BC_ASSERT_STRING_EQUAL_FATAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_STRING_EQUAL_FATAL", !(strcmp((const char*)(cactual), (const char*)(cexpected))), actual, expected, const char*, TRUE, "Expected %s but was %s.", cexpected, cactual) +#define BC_ASSERT_STRING_NOT_EQUAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_STRING_NOT_EQUAL", (strcmp((const char*)(cactual), (const char*)(cexpected))), actual, expected, const char*, FALSE, "Expected NOT %s but it was.", cexpected) +#define BC_ASSERT_STRING_NOT_EQUAL_FATAL(actual, expected) _BC_ASSERT_PRED("BC_ASSERT_STRING_NOT_EQUAL_FATAL", (strcmp((const char*)(cactual), (const char*)(cexpected))), actual, expected, const char*, TRUE, "Expected NOT %s but it was.", cexpected) +#define BC_ASSERT_NSTRING_EQUAL(actual, expected, count) _BC_ASSERT_PRED("BC_ASSERT_NSTRING_EQUAL", !(strncmp((const char*)(cactual), (const char*)(cexpected), (size_t)(count))), actual, expected, const char*, FALSE, "Expected %*s but was %*s.", (int)(count), cexpected, (int)(count), cactual) +#define BC_ASSERT_NSTRING_EQUAL_FATAL(actual, expected, count) _BC_ASSERT_PRED("BC_ASSERT_NSTRING_EQUAL_FATAL", !(strncmp((const char*)(cactual), (const char*)(cexpected), (size_t)(count))), actual, expected, const char*, TRUE, "Expected %*s but was %*s.", (int)count, cexpected, (int)count, cactual) +#define BC_ASSERT_NSTRING_NOT_EQUAL(actual, expected, count) _BC_ASSERT_PRED("BC_ASSERT_NSTRING_NOT_EQUAL", (strncmp((const char*)(cactual), (const char*)(cexpected), (size_t)(count))), actual, expected, const char*, FALSE, "Expected %*s but it was.", (int)count, cexpected) +#define BC_ASSERT_NSTRING_NOT_EQUAL_FATAL(actual, expected, count) _BC_ASSERT_PRED("BC_ASSERT_NSTRING_NOT_EQUAL_FATAL", (strncmp((const char*)(cactual), (const char*)(cexpected), (size_t)(count))), actual, expected, const char*, TRUE, "Expected %*s but it was.", (int)count, cexpected) +#define BC_ASSERT_DOUBLE_EQUAL(actual, expected, granularity) _BC_ASSERT_PRED("BC_ASSERT_DOUBLE_EQUAL", ((fabs((double)(cactual) - (cexpected)) <= fabs((double)(granularity)))), actual, expected, double, FALSE, "Expected %f but was %f.", cexpected, cactual) +#define BC_ASSERT_DOUBLE_EQUAL_FATAL(actual, expected, granularity) _BC_ASSERT_PRED("BC_ASSERT_DOUBLE_EQUAL_FATAL", ((fabs((double)(cactual) - (cexpected)) <= fabs((double)(granularity)))), actual, expected, double, TRUE, "Expected %f but was %f.", cexpected, cactual) +#define BC_ASSERT_DOUBLE_NOT_EQUAL(actual, expected, granularity) _BC_ASSERT_PRED("BC_ASSERT_DOUBLE_NOT_EQUAL", ((fabs((double)(cactual) - (cexpected)) > fabs((double)(granularity)))), actual, expected, double, FALSE, "Expected %f but was %f.", cexpected, cactual) +#define BC_ASSERT_DOUBLE_NOT_EQUAL_FATAL(actual, expected, granularity) _BC_ASSERT_PRED("BC_ASSERT_DOUBLE_NOT_EQUAL_FATAL", ((fabs((double)(cactual) - (cexpected)) > fabs((double)(granularity)))), actual, expected, double, TRUE, "Expected %f but was %f.", cexpected, cactual) + +/*Custom defines*/ +#define BC_ASSERT_GREATER(actual, lower, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_GREATER", ((cactual) >= (cexpected)), actual, lower, type, FALSE, "Expected at least " type_format " but was " type_format ".", cexpected, cactual) +#define BC_ASSERT_LOWER(actual, lower, type, type_format) _BC_ASSERT_PRED("BC_ASSERT_LOWER", ((cactual) <= (cexpected)), actual, lower, type, FALSE, "Expected at most " type_format " but was " type_format ".", cexpected, cactual) + #ifdef __cplusplus } #endif diff --git a/tester/dtmf_tester.c b/tester/dtmf_tester.c index c4c2e3bfe..22d03837c 100644 --- a/tester/dtmf_tester.c +++ b/tester/dtmf_tester.c @@ -43,12 +43,12 @@ void send_dtmf_base(bool_t use_rfc2833, bool_t use_sipinfo, char dtmf, char* dtm linphone_core_set_use_rfc2833_for_dtmf(pauline->lc, use_rfc2833); linphone_core_set_use_info_for_dtmf(pauline->lc, use_sipinfo); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); marie_call = linphone_core_get_current_call(marie->lc); - - CU_ASSERT_PTR_NOT_NULL(marie_call); - + + BC_ASSERT_PTR_NOT_NULL(marie_call); + if (!marie_call) return; if (dtmf != '\0') { @@ -56,7 +56,7 @@ void send_dtmf_base(bool_t use_rfc2833, bool_t use_sipinfo, char dtmf, char* dtm linphone_call_send_dtmf(marie_call, dtmf); /*wait for the DTMF to be received from pauline*/ - CU_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev+1, 10000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev+1, 10000)); expected = ms_strdup_printf("%c", dtmf); } @@ -66,29 +66,29 @@ void send_dtmf_base(bool_t use_rfc2833, bool_t use_sipinfo, char dtmf, char* dtm linphone_call_send_dtmfs(marie_call, dtmf_seq); /*wait for the DTMF sequence to be received from pauline*/ - CU_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev + strlen(dtmf_seq), 10000 + dtmf_delay_ms * strlen(dtmf_seq))); + BC_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev + strlen(dtmf_seq), 10000 + dtmf_delay_ms * strlen(dtmf_seq))); expected = (dtmf!='\0')?ms_strdup_printf("%c%s",dtmf,dtmf_seq):ms_strdup(dtmf_seq); } if (expected != NULL) { - CU_ASSERT_PTR_NOT_NULL(pauline->stat.dtmf_list_received); + BC_ASSERT_PTR_NOT_NULL(pauline->stat.dtmf_list_received); if (pauline->stat.dtmf_list_received) { - CU_ASSERT_STRING_EQUAL(pauline->stat.dtmf_list_received, expected); + BC_ASSERT_STRING_EQUAL(pauline->stat.dtmf_list_received, expected); } ms_free(expected); } else { - CU_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); + BC_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); } } void send_dtmf_cleanup() { - CU_ASSERT_PTR_NULL(marie_call->dtmfs_timer); - CU_ASSERT_PTR_NULL(marie_call->dtmf_sequence); + BC_ASSERT_PTR_NULL(marie_call->dtmfs_timer); + BC_ASSERT_PTR_NULL(marie_call->dtmf_sequence); /*just to sleep*/ linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -116,7 +116,7 @@ static void send_dtmfs_sequence_sip_info() { static void send_dtmfs_sequence_not_ready() { marie = linphone_core_manager_new( "marie_rc"); - CU_ASSERT_EQUAL(linphone_call_send_dtmfs(linphone_core_get_current_call(marie->lc), "123"), -1); + BC_ASSERT_EQUAL(linphone_call_send_dtmfs(linphone_core_get_current_call(marie->lc), "123"), -1, int, "%d"); linphone_core_manager_destroy(marie); } @@ -127,13 +127,13 @@ static void send_dtmfs_sequence_call_state_changed() { linphone_call_send_dtmfs(marie_call, "123456789123456789"); /*just after, change call state, and expect DTMF to be canceled*/ linphone_core_pause_call(marie_call->core,marie_call); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPausing,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPausing,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); /*wait a few time to ensure that no DTMF are received*/ wait_for_until(marie->lc, pauline->lc, NULL, 0, 1000); - CU_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); + BC_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); send_dtmf_cleanup(); } diff --git a/tester/eventapi_tester.c b/tester/eventapi_tester.c index fbe48f9a4..8ac8e2c18 100644 --- a/tester/eventapi_tester.c +++ b/tester/eventapi_tester.c @@ -17,8 +17,7 @@ */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "lpconfig.h" @@ -39,8 +38,8 @@ const char *liblinphone_tester_get_notify_content(void){ void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content){ LinphoneCoreManager *mgr; - CU_ASSERT_PTR_NOT_NULL_FATAL(content); - CU_ASSERT_TRUE(strcmp(notify_content,(const char*)linphone_content_get_buffer(content))==0); + BC_ASSERT_PTR_NOT_NULL_FATAL(content); + BC_ASSERT_TRUE(strcmp(notify_content,(const char*)linphone_content_get_buffer(content))==0); mgr=get_manager(lc); mgr->stat.number_of_NotifyReceived++; } @@ -55,7 +54,7 @@ void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, Li linphone_content_set_type(content,"application"); linphone_content_set_subtype(content,"somexml2"); linphone_content_set_buffer(content,notify_content,strlen(notify_content)); - + ms_message("Subscription state [%s] from [%s]",linphone_subscription_state_to_string(state),from); ms_free(from); @@ -107,10 +106,10 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon ms_free(from); switch(state){ case LinphonePublishProgress: counters->number_of_LinphonePublishProgress++; break; - case LinphonePublishOk: + case LinphonePublishOk: /*make sure custom header access API is working*/ - CU_ASSERT_PTR_NOT_NULL(linphone_event_get_custom_header(ev,"From")); - counters->number_of_LinphonePublishOk++; + BC_ASSERT_PTR_NOT_NULL(linphone_event_get_custom_header(ev,"From")); + counters->number_of_LinphonePublishOk++; break; case LinphonePublishError: counters->number_of_LinphonePublishError++; break; case LinphonePublishExpiring: counters->number_of_LinphonePublishExpiring++; break; @@ -118,7 +117,7 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon default: break; } - + } static void subscribe_test_declined(void) { @@ -140,16 +139,16 @@ static void subscribe_test_declined(void) { lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",600,content); linphone_event_ref(lev); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionError,1,21000));/*yes flexisip may wait 20 secs in case of forking*/ + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionError,1,21000));/*yes flexisip may wait 20 secs in case of forking*/ ei=linphone_event_get_error_info(lev); - CU_ASSERT_PTR_NOT_NULL(ei); + BC_ASSERT_PTR_NOT_NULL(ei); if (ei){ - CU_ASSERT_EQUAL(linphone_error_info_get_protocol_code(ei),603); - CU_ASSERT_PTR_NOT_NULL(linphone_error_info_get_phrase(ei)); + BC_ASSERT_EQUAL(linphone_error_info_get_protocol_code(ei),603, int, "%d"); + BC_ASSERT_PTR_NOT_NULL(linphone_error_info_get_phrase(ei)); } - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); linphone_content_unref(content); linphone_event_unref(lev); @@ -183,33 +182,33 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes linphone_content_set_buffer(content,subscribe_content,strlen(subscribe_content)); lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content); - - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionActive,1,1000)); + + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionActive,1,1000)); /*make sure marie receives first notification before terminating*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); if (refresh_type==AutoRefresh){ wait_for_list(lcs,NULL,0,6000); - CU_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); + BC_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); }else if (refresh_type==ManualRefresh){ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); linphone_event_update_subscribe(lev,NULL); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,2,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,2,2000)); } if (terminated_by_subscriber){ linphone_event_terminate(lev); }else{ - CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); + BC_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); linphone_event_terminate(pauline->lev); } - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -223,7 +222,7 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe LinphoneEvent *lev; int expires= refresh_type!=NoRefresh ? 4 : 600; MSList* lcs=ms_list_append(NULL,marie->lc); - + lcs=ms_list_append(lcs,pauline->lc); if (refresh_type==ManualRefresh){ @@ -240,37 +239,37 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe linphone_event_add_custom_header(lev,"My-Header2","pimpon"); linphone_event_send_subscribe(lev,content); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); /*check good receipt of custom headers*/ - CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header"),"pouet"); - CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header2"),"pimpon"); - - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionActive,1,5000)); + BC_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header"),"pouet"); + BC_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header2"),"pimpon"); + + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionActive,1,5000)); /*make sure marie receives first notification before terminating*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,5000)); - + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,5000)); + if (refresh_type==AutoRefresh){ wait_for_list(lcs,NULL,0,6000); - CU_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); + BC_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); }else if (refresh_type==ManualRefresh){ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionExpiring,1,4000)); linphone_event_update_subscribe(lev,NULL); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,2,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,2,5000)); } if (terminated_by_subscriber){ linphone_event_terminate(lev); }else{ - CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); + BC_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); linphone_event_terminate(pauline->lev); } - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,5000)); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -285,7 +284,7 @@ static void subscribe_test_terminated_by_notifier(void){ subscribe_test_with_args(FALSE,NoRefresh); } -/* Caution: this test does not really check that the subscribe are refreshed, because the core is not managing the expiration of +/* Caution: this test does not really check that the subscribe are refreshed, because the core is not managing the expiration of * unrefreshed subscribe dialogs. So it is just checking that it is not crashing. */ static void subscribe_test_refreshed(void){ @@ -320,21 +319,21 @@ static void publish_test_with_args(bool_t refresh, int expires){ linphone_event_send_publish(lev,content); linphone_event_ref(lev); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); if (!refresh){ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishExpiring,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishExpiring,1,5000)); linphone_event_update_publish(lev,content); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); }else{ - + } linphone_event_terminate(lev); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,3000)); linphone_event_unref(lev); diff --git a/tester/flexisip/flexisip.conf b/tester/flexisip/flexisip.conf index 96ac77cc4..be06bbf89 100755 --- a/tester/flexisip/flexisip.conf +++ b/tester/flexisip/flexisip.conf @@ -60,31 +60,35 @@ bind-address=0.0.0.0 # Default value: 3478 port=3478 + ## -## DOS protection parameters. +## This module bans user when they are sending too much packets on +## a given timelapse ## -[dos-protection] -# Enable or disable DOS protection using IPTables firewall. -# Default value: false -enabled=false +[module::DoS] +# Indicate whether the module is activated. +# Default value: true +enabled=true -# List of whitelist IPs which won't be affected by DOS protection. -# Default value: 127.0.0.1 -authorized-ip=127.0.0.1 +# A request/response enters module if the boolean filter evaluates +# to true. Ex: from.uri.domain contains 'sip.linphone.org', from.uri.domain +# in 'a.org b.org c.org', (to.uri.domain in 'a.org b.org c.org') +# && (user-agent == 'Linphone v2') +# Default value: +filter= -# Local ports to protect. -# Default value: 5060 -port=5060 +# Number of milliseconds to calculate the packet rate +# Default value: 1000 +time-period=1000 -# Time (in seconds) while an IP have to not send any packet in order -# to leave the blacklist. -# Default value: 60 -ban-duration=60 +# Maximum packet rate received in [time-period] millisecond(s) to +# consider to consider it a DoS attack. +# Default value: 5 +packet-rate-limit=5 -# Number of packets authorized in 1sec before considering them as -# DOS attack. -# Default value: 20 -packets-limit=20 +# Number of minutes to ban the ip/port using iptables +# Default value: 1 +ban-time=1 ## @@ -273,10 +277,6 @@ fork-late=true call-fork-timeout=20 -# Only forward one response of forked invite to the caller -# Default value: true -fork-one-response=true - # All the forked have to decline in order to decline the caller # invite # Default value: false @@ -544,3 +544,5 @@ filter= # Default value: collector-address=sip:collector@sip.example.org + + diff --git a/tester/flexisip_tester.c b/tester/flexisip_tester.c index a5e0f3803..926221836 100644 --- a/tester/flexisip_tester.c +++ b/tester/flexisip_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -42,13 +41,13 @@ static void subscribe_forking(void) { lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline2->stat.number_of_LinphoneSubscriptionIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline2->stat.number_of_LinphoneSubscriptionIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionActive,1,1000)); /*make sure marie receives first notification before terminating*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); linphone_event_terminate(lev); @@ -72,10 +71,10 @@ static void message_forking(void) { lcs=ms_list_append(lcs,marie2->lc); linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,1000)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,1000)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); linphone_core_manager_destroy(pauline); @@ -102,21 +101,21 @@ static void message_forking_with_unreachable_recipients(void) { linphone_core_set_network_reachable(marie3->lc,FALSE); linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,1000)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_TRUE( marie2->stat.number_of_LinphoneMessageReceived==0); - CU_ASSERT_TRUE( marie3->stat.number_of_LinphoneMessageReceived==0); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,1000)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(marie2->stat.number_of_LinphoneMessageReceived, 0, int, "%d"); + BC_ASSERT_EQUAL(marie3->stat.number_of_LinphoneMessageReceived, 0, int, "%d"); /*marie 2 goes online */ linphone_core_set_network_reachable(marie2->lc,TRUE); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,3000)); /*wait a long time so that all transactions are expired*/ wait_for_list(lcs,NULL,0,32000); /*marie 3 goes online now*/ linphone_core_set_network_reachable(marie3->lc,TRUE); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneMessageReceived,1,3000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); @@ -146,27 +145,27 @@ static void message_forking_with_all_recipients_unreachable(void) { linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageInProgress,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageInProgress,1,5000)); /*flexisip will accept the message with 202 after 16 seconds*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,18000)); - CU_ASSERT_TRUE( marie->stat.number_of_LinphoneMessageReceived==0); - CU_ASSERT_TRUE( marie2->stat.number_of_LinphoneMessageReceived==0); - CU_ASSERT_TRUE( marie3->stat.number_of_LinphoneMessageReceived==0); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneMessageDelivered,1,18000)); + BC_ASSERT_EQUAL( marie->stat.number_of_LinphoneMessageReceived, 0, int, "%d"); + BC_ASSERT_EQUAL( marie2->stat.number_of_LinphoneMessageReceived, 0, int, "%d"); + BC_ASSERT_EQUAL( marie3->stat.number_of_LinphoneMessageReceived, 0, int, "%d"); /*marie 1 goes online */ linphone_core_set_network_reachable(marie->lc,TRUE); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneMessageReceived,1,3000)); /*marie 2 goes online */ linphone_core_set_network_reachable(marie2->lc,TRUE); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneMessageReceived,1,3000)); /*wait a long time so that all transactions are expired*/ wait_for_list(lcs,NULL,0,32000); /*marie 3 goes online now*/ linphone_core_set_network_reachable(marie3->lc,TRUE); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneMessageReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneMessageReceived,1,3000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); @@ -193,26 +192,26 @@ static void call_forking(void){ linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*all devices from Marie should be ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,3000)); /*marie accepts the call on its first device*/ linphone_core_accept_call(marie->lc,linphone_core_get_current_call(marie->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); /*other devices should stop ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_terminate_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -237,27 +236,27 @@ static void call_forking_with_urgent_reply(void){ linphone_core_set_user_agent(marie3->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL); - CU_ASSERT_TRUE(linphone_core_media_encryption_supported(pauline->lc,LinphoneMediaEncryptionSRTP)); + BC_ASSERT_TRUE(linphone_core_media_encryption_supported(pauline->lc,LinphoneMediaEncryptionSRTP)); linphone_core_set_media_encryption(pauline->lc,LinphoneMediaEncryptionSRTP); linphone_core_set_network_reachable(marie2->lc,FALSE); linphone_core_set_network_reachable(marie3->lc,FALSE); linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback, after 5 seconds, when it will retry without SRTP*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,9000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,9000)); /*Marie should be ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*marie accepts the call on its first device*/ linphone_core_accept_call(marie->lc,linphone_core_get_current_call(marie->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); linphone_core_terminate_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -284,20 +283,20 @@ static void call_forking_cancelled(void){ linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*all devices from Marie should be ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*pauline finally cancels the call*/ linphone_core_terminate_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); /*all devices should stop ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -324,11 +323,11 @@ static void call_forking_declined(bool_t declined_globaly){ linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*all devices from Marie should be ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*marie1 finally declines the call*/ linphone_core_decline_call(marie->lc,linphone_core_get_current_call(marie->lc), @@ -336,22 +335,22 @@ static void call_forking_declined(bool_t declined_globaly){ ); if (declined_globaly){ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); /*all devices should stop ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); }else{ /*pauline should continue ringing and be able to hear a call taken by marie2 */ linphone_core_accept_call(marie2->lc, linphone_core_get_current_call(marie2->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallStreamsRunning,1,2000)); liblinphone_tester_check_rtcp(pauline,marie2); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,3000)); linphone_core_terminate_call(marie2->lc,linphone_core_get_current_call(marie2->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,3000)); } linphone_core_manager_destroy(pauline); @@ -390,22 +389,22 @@ static void call_forking_with_push_notification_single(void){ linphone_core_set_network_reachable(marie->lc,TRUE); /*Marie shall receive the call immediately*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,5000)); /*pauline should hear ringback as well*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); /*marie accepts the call*/ linphone_core_accept_call(marie->lc,linphone_core_get_current_call(marie->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); liblinphone_tester_check_rtcp(pauline,marie); linphone_core_terminate_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,5000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -432,32 +431,32 @@ static void call_forking_with_push_notification_multiple(void){ linphone_core_invite_address(pauline->lc,marie->identity); /*marie1 will ring*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,5000)); /*pauline should hear ringback as well*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); /*the server is expected to send a push notification to marie2, this will wake up linphone, that will reconnect:*/ linphone_core_set_network_reachable(marie2->lc,TRUE); /*Marie shall receive the call immediately*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,5000)); /*marie2 accepts the call*/ linphone_core_accept_call(marie2->lc,linphone_core_get_current_call(marie2->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallStreamsRunning,1,1000)); /*call to marie1 should be cancelled*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); liblinphone_tester_check_rtcp(pauline,marie2); linphone_core_terminate_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -482,18 +481,18 @@ static void call_forking_not_responded(void){ linphone_core_invite_address(pauline->lc,marie->identity); /*pauline should hear ringback*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*all devices from Marie should be ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*nobody answers, flexisip should close the call after XX seconds*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallError,1,22000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallError,1,22000)); /*all devices should stop ringing*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie3->stat.number_of_LinphoneCallEnd,1,1000)); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); @@ -541,10 +540,10 @@ static void early_media_call_forking(void) { linphone_core_invite_address_with_params(pauline->lc,marie1->identity,params); linphone_call_params_destroy(params); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,3000)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,3000)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia,1, int, "%d"); pauline_call=linphone_core_get_current_call(pauline->lc); marie1_call=linphone_core_get_current_call(marie1->lc); @@ -552,30 +551,30 @@ static void early_media_call_forking(void) { /*wait a bit that streams are established*/ wait_for_list(lcs,&dummy,1,6000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>60 - && linphone_call_get_audio_stats(pauline_call)->download_bandwidth<99); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>60 - && linphone_call_get_audio_stats(marie1_call)->download_bandwidth<99); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth>60 - && linphone_call_get_audio_stats(marie2_call)->download_bandwidth<99); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 60, int, "%d"); + BC_ASSERT_LOWER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 99, int, "%d"); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 60, int, "%d"); + BC_ASSERT_LOWER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 99, int, "%d"); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 60, int, "%d"); + BC_ASSERT_LOWER(linphone_call_get_audio_stats(marie2_call)->download_bandwidth, 99, int, "%d"); linphone_core_accept_call(marie1->lc,linphone_core_get_current_call(marie1->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallStreamsRunning,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallStreamsRunning,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,3000)); /*marie2 should get her call terminated*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie2->stat.number_of_LinphoneCallEnd,1,1000)); /*wait a bit that streams are established*/ wait_for_list(lcs,&dummy,1,3000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth>60 - && linphone_call_get_audio_stats(pauline_call)->download_bandwidth<99 ); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth>60 - && linphone_call_get_audio_stats(marie1_call)->download_bandwidth<99 ); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 60, int, "%d"); + BC_ASSERT_LOWER(linphone_call_get_audio_stats(pauline_call)->download_bandwidth, 99, int, "%d"); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 60, int, "%d"); + BC_ASSERT_LOWER(linphone_call_get_audio_stats(marie1_call)->download_bandwidth, 99, int, "%d"); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie1->stat.number_of_LinphoneCallEnd,1,5000)); ms_list_free(lcs); linphone_core_manager_destroy(marie1); @@ -599,23 +598,23 @@ static void call_with_sips(void){ linphone_core_invite_address(marie->lc,pauline1->identity); /*marie should hear ringback*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingRinging,1,3000)); /*Only the sips registered device from pauline should ring*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallIncomingReceived,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallIncomingReceived,1,1000)); /*pauline accepts the call */ linphone_core_accept_call(pauline1->lc,linphone_core_get_current_call(pauline1->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallStreamsRunning,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallStreamsRunning,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,1000)); /*pauline2 should not have ring*/ - CU_ASSERT_TRUE(pauline2->stat.number_of_LinphoneCallIncomingReceived==0); + BC_ASSERT_EQUAL(pauline2->stat.number_of_LinphoneCallIncomingReceived, 0, int, "%d"); linphone_core_terminate_call(pauline1->lc,linphone_core_get_current_call(pauline1->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallEnd,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline1->stat.number_of_LinphoneCallEnd,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,3000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline1); @@ -643,11 +642,11 @@ static void call_with_sips_not_achievable(void){ linphone_address_unref(dest); /*Call should be rejected by server with 480*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallError,1,6000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallError,1,6000)); ei=linphone_call_get_error_info(call); - CU_ASSERT_PTR_NOT_NULL(ei); + BC_ASSERT_PTR_NOT_NULL(ei); if (ei){ - CU_ASSERT_EQUAL(linphone_error_info_get_reason(ei), LinphoneReasonTemporarilyUnavailable); + BC_ASSERT_EQUAL(linphone_error_info_get_reason(ei), LinphoneReasonTemporarilyUnavailable, int, "%d"); } linphone_core_manager_destroy(marie); @@ -680,20 +679,20 @@ static void call_with_ipv6(void) { linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL); linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); if (pauline_call){ /*check that the remote contact is IPv6*/ const char *contact=linphone_call_get_remote_contact(pauline_call); LinphoneAddress *ct_addr; - CU_ASSERT_PTR_NOT_NULL(contact); + BC_ASSERT_PTR_NOT_NULL(contact); if (contact){ ct_addr=linphone_address_new(contact); - CU_ASSERT_PTR_NOT_NULL(ct_addr); + BC_ASSERT_PTR_NOT_NULL(ct_addr); if (ct_addr){ - CU_ASSERT_TRUE(strchr(linphone_address_get_domain(ct_addr),':')!=NULL); + BC_ASSERT_PTR_NOT_NULL(strchr(linphone_address_get_domain(ct_addr),':')); } linphone_address_destroy(ct_addr); } @@ -707,7 +706,7 @@ static void call_with_ipv6(void) { liblinphone_tester_enable_ipv6(FALSE); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_EQUAL(leaked_objects, 0, int, "%d"); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -727,13 +726,13 @@ static void file_transfer_message_rcs_to_external_body_client(void) { LinphoneCoreManager* marie = linphone_core_manager_init( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_init( "pauline_rc"); - + linphone_proxy_config_set_custom_header(marie->lc->default_proxy, "Accept", "application/sdp"); linphone_core_manager_start(marie, "marie_rc", TRUE); - + linphone_proxy_config_set_custom_header(pauline->lc->default_proxy, "Accept", "application/sdp, text/plain, application/vnd.gsma.rcs-ft-http+xml"); linphone_core_manager_start(pauline, "pauline_rc", TRUE); - + reset_counters(&marie->stat); reset_counters(&pauline->stat); @@ -767,7 +766,7 @@ static void file_transfer_message_rcs_to_external_body_client(void) { linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageExtBodyReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageExtBodyReceived,1)); fclose(file_to_send); if (marie->stat.last_received_chat_message ) { cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); @@ -775,12 +774,12 @@ static void file_transfer_message_rcs_to_external_body_client(void) { linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageFileTransferDone,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageFileTransferDone,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1); - CU_ASSERT_TRUE(compare_files(send_filepath, receive_filepath)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1, int, "%d"); + BC_ASSERT_TRUE(compare_files(send_filepath, receive_filepath)); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -807,29 +806,29 @@ static void send_file_transfer_message_using_external_body_url(LinphoneCoreManag linphone_chat_message_set_external_body_url(message, "https://www.linphone.org:444//tmp/54ec58280ace9_c30709218df8eaba61d1.jpg"); linphone_chat_room_send_chat_message(chat_room, message); - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageReceived, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageReceived, 1)); if (marie->stat.last_received_chat_message) { linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageExtBodyReceived, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageExtBodyReceived, 1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress, 1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived, 1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress, 1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived, 1, int, "%d"); } static void file_transfer_message_external_body_to_external_body_client(void) { LinphoneCoreManager* marie = linphone_core_manager_init( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_init( "pauline_rc"); - + linphone_proxy_config_set_custom_header(marie->lc->default_proxy, "Accept", "application/sdp"); linphone_core_manager_start(marie, "marie_rc", TRUE); - + linphone_proxy_config_set_custom_header(pauline->lc->default_proxy, "Accept", "application/sdp"); linphone_core_manager_start(pauline, "pauline_rc", TRUE); - + reset_counters(&marie->stat); reset_counters(&pauline->stat); - + linphone_core_refresh_registers(marie->lc); linphone_core_refresh_registers(pauline->lc); @@ -842,13 +841,13 @@ static void file_transfer_message_external_body_to_external_body_client(void) { static void file_transfer_message_external_body_to_rcs_client(void) { LinphoneCoreManager* marie = linphone_core_manager_init( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_init( "pauline_rc"); - + linphone_proxy_config_set_custom_header(marie->lc->default_proxy, "Accept", "application/sdp"); linphone_core_manager_start(marie, "marie_rc", TRUE); - + linphone_proxy_config_set_custom_header(pauline->lc->default_proxy, "Accept", "application/sdp, text/plain, application/vnd.gsma.rcs-ft-http+xml"); linphone_core_manager_start(pauline, "pauline_rc", TRUE); - + reset_counters(&marie->stat); reset_counters(&pauline->stat); @@ -858,6 +857,43 @@ static void file_transfer_message_external_body_to_rcs_client(void) { linphone_core_manager_destroy(pauline); } +static void dos_module_trigger(void) { + char *to; + LinphoneChatRoom *chat_room; + int i = 0; + int number_of_messge_to_send = 100; + LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_rc"); + + reset_counters(&marie->stat); + reset_counters(&pauline->stat); + + to = linphone_address_as_string(marie->identity); + chat_room = linphone_core_create_chat_room(pauline->lc,to); + + do { + char msg[128]; + sprintf(msg, "Flood message number %i", i); + linphone_chat_room_send_message(chat_room, msg); + ms_usleep(100000); + i++; + } while (i < number_of_messge_to_send); + // At this point we should be banned for a minute + + ms_usleep(90000000); // Wait 90 seconds to ensure we are not banned anymore + BC_ASSERT_LOWER(marie->stat.number_of_LinphoneMessageReceived, number_of_messge_to_send, int, "%d"); + + reset_counters(&marie->stat); + reset_counters(&pauline->stat); + + linphone_chat_room_send_message(chat_room, "This one should pass through"); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived, 1)); + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + ms_free(to); +} + test_t flexisip_tests[] = { { "Subscribe forking", subscribe_forking }, { "Message forking", message_forking }, @@ -877,7 +913,8 @@ test_t flexisip_tests[] = { { "Call with ipv6", call_with_ipv6 }, { "File transfer message rcs to external body client", file_transfer_message_rcs_to_external_body_client }, { "File transfer message external body to rcs client", file_transfer_message_external_body_to_rcs_client }, - { "File transfer message external body to external body client", file_transfer_message_external_body_to_external_body_client } + { "File transfer message external body to external body client", file_transfer_message_external_body_to_external_body_client }, + { "DoS module trigger by sending a lot of chat messages", dos_module_trigger } }; diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index 0469b3675..d4f42190d 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -28,7 +27,6 @@ #include #endif - static FILE * log_file = NULL; #ifdef ANDROID diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 72e6abd99..4fb0e2fa0 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -283,6 +283,7 @@ bool_t call_with_test_params(LinphoneCoreManager* caller_mgr ,const LinphoneCallTestParams *callee_test_params); bool_t call(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr); +bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee, bool_t change_video_policy); void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2); void disable_all_audio_codecs_except_one(LinphoneCore *lc, const char *mime, int rate); void disable_all_video_codecs_except_one(LinphoneCore *lc, const char *mime); @@ -307,5 +308,9 @@ void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_r bool_t call_with_caller_params(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr, const LinphoneCallParams *params); bool_t pause_call_1(LinphoneCoreManager* mgr_1,LinphoneCall* call_1,LinphoneCoreManager* mgr_2,LinphoneCall* call_2); bool_t compare_files(const char *path1, const char *path2); +void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* lcs,LinphoneMediaDirection audio_dir, LinphoneMediaDirection video_dir); + +static const int audio_cmp_max_shift=20; + #endif /* LIBLINPHONE_TESTER_H_ */ diff --git a/tester/log_collection_tester.c b/tester/log_collection_tester.c index 9a5d8b179..3d55075c7 100644 --- a/tester/log_collection_tester.c +++ b/tester/log_collection_tester.c @@ -16,13 +16,10 @@ along with this program. If not, see . */ -#include -#ifndef __USE_XOPEN - /*on Debian OS, time.h does declare strptime only if __USE_XOPEN is declared */ - #define __USE_XOPEN +#ifndef _XOPEN_SOURCE + #define _XOPEN_SOURCE 700 // To have definition of strptime, snprintf and getline #endif #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -136,7 +133,7 @@ static FILE* gzuncompress(const char* filepath) { memset(buffer, 0, strlen(buffer)); } fclose(output); - CU_ASSERT_EQUAL(gzclose(file), Z_OK); + BC_ASSERT_EQUAL(gzclose(file), Z_OK, int, "%d"); ret=fopen(newname, "rb"); ms_free(newname); return ret; @@ -169,7 +166,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { uint32_t timediff = 0; FILE *file = NULL; - CU_ASSERT_PTR_NOT_NULL(filepath); + BC_ASSERT_PTR_NOT_NULL(filepath); if (filepath != NULL) { int line_count = 0; @@ -186,10 +183,10 @@ static time_t check_file(LinphoneCoreManager* mgr) { #else file = fopen(filepath, "rb"); #endif - CU_ASSERT_PTR_NOT_NULL(file); + BC_ASSERT_PTR_NOT_NULL(file); if (!file) return 0; // 1) expect to find folder name in filename path - CU_ASSERT_PTR_NOT_NULL(strstr(filepath, bc_tester_writable_dir_prefix)); + BC_ASSERT_PTR_NOT_NULL(strstr(filepath, bc_tester_writable_dir_prefix)); // 2) check file contents while (getline(&line, &line_size, file) != -1) { @@ -205,13 +202,13 @@ static time_t check_file(LinphoneCoreManager* mgr) { if (strptime(date, "%Y-%m-%d %H:%M:%S", &tm_curr) != NULL) { tm_curr.tm_isdst = -1; // LOL log_time = mktime(&tm_curr); - CU_ASSERT_TRUE(log_time >= time_prev); + BC_ASSERT_TRUE(log_time >= time_prev); time_prev = log_time; } } #endif } - CU_ASSERT_TRUE(line_count > 25); + BC_ASSERT_TRUE(line_count > 25); free(line); fclose(file); ms_free(filepath); @@ -220,7 +217,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { timediff = labs((long int)log_time - (long int)cur_time); (void)timediff; #ifndef WIN32 - CU_ASSERT_TRUE( timediff <= 1 ); + BC_ASSERT_TRUE( timediff <= 1 ); if( !(timediff <= 1) ){ char buffers[2][128] = {{0}}; strftime(buffers[0], sizeof(buffers[0]), "%Y-%m-%d %H:%M:%S", localtime(&log_time)); @@ -242,7 +239,7 @@ static time_t check_file(LinphoneCoreManager* mgr) { static void collect_files_disabled() { LinphoneCoreManager* marie = setup(FALSE); - CU_ASSERT_PTR_NULL(linphone_core_compress_log_collection(marie->lc)); + BC_ASSERT_PTR_NULL(linphone_core_compress_log_collection(marie->lc)); collect_cleanup(marie); } @@ -282,7 +279,7 @@ static void logCollectionUploadStateChangedCb(LinphoneCore *lc, LinphoneCoreLogC break; case LinphoneCoreLogCollectionUploadStateDelivered: counters->number_of_LinphoneCoreLogCollectionUploadStateDelivered++; - CU_ASSERT_TRUE(strlen(info)>0) + BC_ASSERT_GREATER(strlen(info), 0, int, "%d"); break; case LinphoneCoreLogCollectionUploadStateNotDelivered: counters->number_of_LinphoneCoreLogCollectionUploadStateNotDelivered++; @@ -302,7 +299,7 @@ static void upload_collected_traces() { while (--waiting) ms_error("(test error)Waiting %d...", waiting); linphone_core_compress_log_collection(marie->lc); linphone_core_upload_log_collection(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCoreLogCollectionUploadStateDelivered,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCoreLogCollectionUploadStateDelivered,1)); /*try 2 times*/ waiting=100; @@ -310,7 +307,7 @@ static void upload_collected_traces() { while (--waiting) ms_error("(test error)Waiting %d...", waiting); linphone_core_compress_log_collection(marie->lc); linphone_core_upload_log_collection(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCoreLogCollectionUploadStateDelivered,2)); + BC_ASSERT_TRUE(wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneCoreLogCollectionUploadStateDelivered,2)); collect_cleanup(marie); } diff --git a/tester/message_tester.c b/tester/message_tester.c index 506d714d7..7e27f0ff4 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -17,8 +17,7 @@ */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -54,7 +53,7 @@ void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMess } else if (linphone_chat_message_get_external_body_url(message)) { counters->number_of_LinphoneMessageExtBodyReceived++; if (message_external_body_url) { - CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_external_body_url(message),message_external_body_url); + BC_ASSERT_STRING_EQUAL(linphone_chat_message_get_external_body_url(message),message_external_body_url); message_external_body_url=NULL; } } @@ -199,10 +198,10 @@ static void text_message(void) { reset_counters(&pauline->stat); } linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1, int, "%d"); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -225,12 +224,12 @@ static void text_message_within_dialog(void) { reset_counters(&marie->stat); reset_counters(&pauline->stat); } - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -268,10 +267,10 @@ static void text_message_with_credential_from_auth_cb(void) { reset_counters(&pauline->stat); } linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1, int, "%d"); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -293,7 +292,7 @@ static void text_message_with_privacy(void) { linphone_core_get_default_proxy(pauline->lc,&pauline_proxy); linphone_proxy_config_set_privacy(pauline_proxy,LinphonePrivacyId); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ @@ -301,8 +300,8 @@ static void text_message_with_privacy(void) { reset_counters(&pauline->stat); } linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -320,7 +319,7 @@ static void text_message_compatibility_mode(void) { LinphoneChatRoom* chat_room; linphone_core_get_default_proxy(marie->lc,&proxy); - CU_ASSERT_PTR_NOT_NULL (proxy); + BC_ASSERT_PTR_NOT_NULL (proxy); proxy_address=linphone_address_new(linphone_proxy_config_get_addr(proxy)); linphone_address_clean(proxy_address); tmp=linphone_address_as_string_uri_only(proxy_address); @@ -337,7 +336,7 @@ static void text_message_compatibility_mode(void) { linphone_core_set_sip_transports(marie->lc,&transport); marie->stat.number_of_LinphoneRegistrationOk=0; - CU_ASSERT_TRUE (wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE (wait_for(marie->lc,marie->lc,&marie->stat.number_of_LinphoneRegistrationOk,1)); chat_room = linphone_core_create_chat_room(marie->lc,to); { @@ -347,8 +346,8 @@ static void text_message_compatibility_mode(void) { reset_counters(&pauline->stat); } linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceivedLegacy,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceivedLegacy,1, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -376,15 +375,15 @@ static void text_message_with_ack(void) { reset_counters(&pauline->stat); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); ms_free(to); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -410,16 +409,16 @@ static void text_message_with_external_body(void) { linphone_chat_room_send_chat_message(chat_room,message); /* check transient message list: the message should be in it, and should be the only one */ - CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1); - CU_ASSERT_EQUAL(ms_list_nth_data(chat_room->transient_messages,0), message); + BC_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1, int, "%d"); + BC_ASSERT_PTR_EQUAL(ms_list_nth_data(chat_room->transient_messages,0), message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1, int, "%d"); - CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 0); + BC_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 0, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -487,7 +486,7 @@ static void file_transfer_message(void) { linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_send(cbs, file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); fclose(file_to_send); if (marie->stat.last_received_chat_message ) { cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); @@ -495,12 +494,12 @@ static void file_transfer_message(void) { linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1); - CU_ASSERT_TRUE(compare_files(send_filepath, receive_filepath)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1, int, "%d"); + BC_ASSERT_TRUE(compare_files(send_filepath, receive_filepath)); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -554,18 +553,18 @@ static void small_file_transfer_message(void) { linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1, int, "%d"); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -641,18 +640,18 @@ static void lime_file_transfer_message(void) { linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_send(cbs, memory_file_transfer_send); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,1, int, "%d"); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -662,13 +661,19 @@ static void lime_file_transfer_message(void) { static void printHex(char *title, uint8_t *data, uint32_t length) { int i; - printf ("%s : ", title); + char debug_string_buffer[2048]; + char *debug_string = debug_string_buffer; + sprintf (debug_string, "%s : ", title); + debug_string += strlen(title)+3; for (i=0; i\nef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com963c57bb28e62068d2df23e8f9b771932d3c57bb28e62068d2df23e8f9b7719305d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b771935f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719302ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000069000001e8011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899pipo1@pipo.com123456789012345678901234567890123456765431262068d2df23e8f9b7719325d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b77193000000010000000001"); + fclose(CACHE); + CACHE = fopen("ZIDCache.xml", "rb+"); + cacheBufferString = (uint8_t*) ms_load_file_content(CACHE, &size); + *(cacheBufferString+size) = '\0'; + fclose(CACHE); + /* parse it to an xmlDoc */ + cacheBuffer = xmlParseDoc(cacheBufferString); + ms_free(cacheBufferString); + + /* get data from cache : sender */ + associatedKeys.peerURI = (uint8_t *)malloc(15); + memcpy(associatedKeys.peerURI, "pipo1@pipo.com", 15); + associatedKeys.associatedZIDNumber = 0; + retval = lime_getCachedSndKeysByURI(cacheBuffer, &associatedKeys); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); + BC_ASSERT_EQUAL_FATAL(associatedKeys.associatedZIDNumber, 2, int, "%d"); /* there are 2 keys associated to pipo1@pipo.com address in the cache above*/ + ms_message("Get cached key by URI, for sender, return %d keys", associatedKeys.associatedZIDNumber); + + for (i=0; ipeerZID, 12); + printHex("key", associatedKeys.peerKeys[i]->key, 32); + printHex("sessionID", associatedKeys.peerKeys[i]->sessionId, 32); + ms_message("session index %d\n", associatedKeys.peerKeys[i]->sessionIndex); + } + + /* get data from cache : receiver */ + memcpy(associatedKey.peerZID, targetZID, 12); + retval = lime_getCachedRcvKeyByZid(cacheBuffer, &associatedKey); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); + printHex("Got receiver key for ZID", targetZID, 12); + printHex("Key", associatedKey.key, 32); + printHex("sessionID", associatedKey.sessionId, 32); + ms_message("session index %d\n", associatedKey.sessionIndex); + + /* encrypt/decrypt a message */ + lime_encryptMessage(associatedKeys.peerKeys[0], (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, strlen(PLAIN_TEXT_TEST_MESSAGE), senderZID, encryptedMessage); + printHex("Ciphered", encryptedMessage, strlen((char *)encryptedMessage)); + /* invert sender and receiverZID to decrypt/authenticate */ + memcpy(receiverZID, associatedKeys.peerKeys[0]->peerZID, 12); + memcpy(associatedKeys.peerKeys[0]->peerZID, senderZID, 12); + retval = lime_decryptMessage(associatedKeys.peerKeys[0], encryptedMessage, strlen(PLAIN_TEXT_TEST_MESSAGE)+16, receiverZID, plainMessage); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); + BC_ASSERT_STRING_EQUAL((char *)plainMessage, (char *)PLAIN_TEXT_TEST_MESSAGE); + ms_message("Decrypt and auth returned %d\nPlain text is %s\n", retval, plainMessage); + + /* update receiver data */ + associatedKey.sessionIndex++; + associatedKey.key[0]++; + associatedKey.sessionId[0]++; + retval = lime_setCachedKey(cacheBuffer, &associatedKey, LIME_RECEIVER); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); + + /* update sender data */ + associatedKeys.peerKeys[0]->sessionIndex++; + associatedKeys.peerKeys[0]->key[0]++; + associatedKeys.peerKeys[0]->sessionId[0]++; + retval = lime_setCachedKey(cacheBuffer, associatedKeys.peerKeys[0], LIME_SENDER); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); + + /* free memory */ + lime_freeKeys(associatedKeys); + + /* write the file */ + /* dump the xml document into a string */ + xmlDocDumpFormatMemoryEnc(cacheBuffer, &xmlStringOutput, &xmlStringLength, "UTF-8", 0); + /* write it to the file */ + CACHE = fopen("ZIDCache.xml", "w+"); + fwrite(xmlStringOutput, 1, xmlStringLength, CACHE); + xmlFree(xmlStringOutput); + fclose(CACHE); + xmlFreeDoc(cacheBuffer); + + /**** Higher level tests using 2 caches to encrypt/decrypt a message ****/ + /* Create Alice cache file and then load it */ + CACHE = fopen("ZIDCacheAlice.xml", "wb"); + fprintf(CACHE, "\nef7692d0792a67491ae2d44e005dbe0399643d953a2202dd9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:pauline@sip.example.org72d80ab1cad243cf45634980c1d02cfb2df81ce0dd5dfcf1ebeacfc5345a917625d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000000f00000000"); + fclose(CACHE); + CACHE = fopen("ZIDCacheAlice.xml", "rb+"); cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size); *(cacheBufferString+size) = '\0'; fclose(CACHE); @@ -698,7 +786,10 @@ static void lime_unit(void) { cacheBufferAlice = xmlParseDoc(cacheBufferString); ms_free(cacheBufferString); - /* Load Bob cache file */ + /* Create Bob cache file and then load it */ + CACHE = fopen("ZIDCacheBob.xml", "wb"); + fprintf(CACHE, "\n005dbe0399643d953a2202ddef7692d0792a67491ae2d44e9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org9111ebeb52e50edcc6fcb3eea1a2d3ae3c2c75d3668923e83c59d0f47245515060f020a3fe11dc2cc0e1e8ed9341b4cd14944db806ca4fc95456bbe45d95c43a5f9aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b77193bcffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b7719300000080000001cf011234567889643d953a2202ee9b5c8f06f3b6c2c695f2dfc3c26f31f5fef8661f8c5fe7c95aeb5c5b0435b045f8324dd18ea905171ec2be89f879d01d5994132048d92ea020778cbdf31c605e2fdcef69380937c2cf221f7d11526f286c39f49641452ba9012521c705094899sip:marie@sip.example.org81e6e6362c34dc974263d1f77cbb9a8d6d6a718330994379099a8fa19fb12faa25d9ac653a83c4559cb0ae7394e7cd3b2d3c57bb28e62068d2df23e8f9b77193f69aa1e5e4c7ec88fa389a9f6b8879b42d3c57bb28e62068d2df23e8f9b7719322ffd51e7316a6c6f53a50fcf01b01bf2d3c57bb28e62068d2df23e8f9b771930000002e0000000001"); + fclose(CACHE); CACHE = fopen("ZIDCacheBob.xml", "rb+"); cacheBufferString = (uint8_t *)ms_load_file_content(CACHE, &size); *(cacheBufferString+size) = '\0'; @@ -710,19 +801,20 @@ static void lime_unit(void) { /* encrypt a message */ - retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)"Bonjour les petits lapins,ca va? éh oui oui", (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage); + retval = lime_createMultipartMessage(cacheBufferAlice, (uint8_t *)PLAIN_TEXT_TEST_MESSAGE, (uint8_t *)"sip:pauline@sip.example.org", &multipartMessage); - printf("create message return %d\n", retval); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); if (retval == 0) { - printf("message is %s\n", multipartMessage); + ms_message("Encrypted message created is %s", multipartMessage); } /* decrypt the multipart message */ retval = lime_decryptMultipartMessage(cacheBufferBob, multipartMessage, &decryptedMessage); - printf("decrypt message return %d\n", retval); + BC_ASSERT_EQUAL_FATAL(retval, 0, int, "%d"); if (retval == 0) { - printf("message is %s##END\n", decryptedMessage); + BC_ASSERT_STRING_EQUAL((char *)decryptedMessage, (char *)PLAIN_TEXT_TEST_MESSAGE); + ms_message("Succesfully decrypted message is %s", decryptedMessage); } free(multipartMessage); free(decryptedMessage); @@ -746,74 +838,6 @@ static void lime_unit(void) { xmlFreeDoc(cacheBufferAlice); xmlFreeDoc(cacheBufferBob); - - /* Load cache file */ - CACHE = fopen("ZIDCache.xml", "rb+"); - cacheBufferString = (uint8_t*) ms_load_file_content(CACHE, &size); - *(cacheBufferString+size) = '\0'; - fclose(CACHE); - /* parse it to an xmlDoc */ - cacheBuffer = xmlParseDoc(cacheBufferString); - ms_free(cacheBufferString); - - /* get data from cache : sender */ - associatedKeys.peerURI = (uint8_t *)malloc(15); - memcpy(associatedKeys.peerURI, "pipo1@pipo.com", 15); - associatedKeys.associatedZIDNumber = 0; - retval = lime_getCachedSndKeysByURI(cacheBuffer, &associatedKeys); - printf("getCachedKeys returns %d, number of key found %d\n", retval, associatedKeys.associatedZIDNumber); - - for (i=0; ipeerZID, 12); - printHex("key", associatedKeys.peerKeys[i]->key, 32); - printHex("sessionID", associatedKeys.peerKeys[i]->sessionId, 32); - printf("session index %d\n", associatedKeys.peerKeys[i]->sessionIndex); - } - - /* get data from cache : receiver */ - memcpy(associatedKey.peerZID, targetZID, 12); - retval = lime_getCachedRcvKeyByZid(cacheBuffer, &associatedKey); - printf("getCachedKey by ZID return %d\n", retval); - - printHex("Key", associatedKey.key, 32); - printHex("sessionID", associatedKey.sessionId, 32); - printf("session index %d\n", associatedKey.sessionIndex); - - /* encrypt/decrypt a message */ - lime_encryptMessage(associatedKeys.peerKeys[0], (uint8_t *)"bla Bla bla b! Pipo", 20, senderZID, encryptedMessage); - printHex("Ciphered", encryptedMessage, 32); - /* invert sender and receiverZID to decrypt/authenticate */ - memcpy(receiverZID, associatedKeys.peerKeys[0]->peerZID, 12); - memcpy(associatedKeys.peerKeys[0]->peerZID, senderZID, 12); - retval = lime_decryptMessage(associatedKeys.peerKeys[0], encryptedMessage, 36, receiverZID, plainMessage); - printf("Decrypt and auth returned %d\nPlain: %s\n", retval, plainMessage); - - /* update receiver data */ - associatedKey.sessionIndex++; - associatedKey.key[0]++; - associatedKey.sessionId[0]++; - retval = lime_setCachedKey(cacheBuffer, &associatedKey, LIME_RECEIVER); - printf("setCachedKey return %d\n", retval); - - /* update sender data */ - associatedKeys.peerKeys[0]->sessionIndex++; - associatedKeys.peerKeys[0]->key[0]++; - associatedKeys.peerKeys[0]->sessionId[0]++; - retval = lime_setCachedKey(cacheBuffer, associatedKeys.peerKeys[0], LIME_SENDER); - printf("setCachedKey return %d\n", retval); - - /* free memory */ - lime_freeKeys(associatedKeys); - - /* write the file */ - /* dump the xml document into a string */ - xmlDocDumpFormatMemoryEnc(cacheBuffer, &xmlStringOutput, &xmlStringLength, "UTF-8", 0); - /* write it to the file */ - CACHE = fopen("ZIDCache.xml", "w+"); - fwrite(xmlStringOutput, 1, xmlStringLength, CACHE); - xmlFree(xmlStringOutput); - fclose(CACHE); - xmlFreeDoc(cacheBuffer); } static void lime_text_message(void) { @@ -842,10 +866,10 @@ static void lime_text_message(void) { ms_free(to); linphone_chat_room_send_message(chat_room,"Bla bla bla bla"); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageReceivedLegacy,1, int, "%d"); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_chat_room(marie->lc,pauline->identity)); /* TODO : check the message arrived correctly deciphered */ linphone_core_manager_destroy(marie); @@ -901,18 +925,18 @@ static void file_transfer_message_io_error_upload(void) { linphone_chat_room_send_chat_message(chat_room,message); /*wait for file to be 25% uploaded and simultate a network error*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer,25)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer,25)); sal_set_send_error(pauline->lc->sal, -1); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageNotDelivered,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageNotDelivered,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0, int, "%d"); sal_set_send_error(pauline->lc->sal, 0); linphone_core_refresh_registers(pauline->lc); /*to make sure registration is back in registered and so it can be later unregistered*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneRegistrationOk,pauline->stat.number_of_LinphoneRegistrationOk+1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneRegistrationOk,pauline->stat.number_of_LinphoneRegistrationOk+1)); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -965,21 +989,21 @@ static void file_transfer_message_io_error_download(void) { linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); /* wait for marie to receive pauline's message */ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { /* get last message and use it to download file */ linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change, marie->lc); /* wait for file to be 50% downloaded */ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); /* and simulate network error */ sal_set_recv_error(marie->lc->sal, -1); } - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageNotDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageNotDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0, int, "%d"); sal_set_recv_error(marie->lc->sal, 0); linphone_core_manager_destroy(marie); @@ -1035,13 +1059,13 @@ static void file_transfer_message_upload_cancelled(void) { linphone_chat_room_send_chat_message(chat_room,message); /*wait for file to be 50% uploaded and cancel the transfer */ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer, 50)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer, 50)); linphone_chat_message_cancel_file_transfer(message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageNotDelivered,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageNotDelivered,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0, int, "%d"); linphone_content_unref(content); linphone_core_manager_destroy(marie); @@ -1092,21 +1116,21 @@ static void file_transfer_message_download_cancelled(void) { linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); /* wait for marie to receive pauline's message */ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { /* get last message and use it to download file */ linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change, marie->lc); /* wait for file to be 50% downloaded */ - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); /* and cancel the transfer */ linphone_chat_message_cancel_file_transfer(marie->stat.last_received_chat_message); } - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageNotDelivered,1); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneFileTransferDownloadSuccessful,0, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageNotDelivered,1, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1140,12 +1164,12 @@ static void file_transfer_using_external_body_url(void) { linphone_chat_message_set_external_body_url(message, "https://www.linphone.org:444//tmp/54ec58280ace9_c30709218df8eaba61d1.jpg"); linphone_chat_room_send_chat_message(chat_room, message); - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageReceived, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageReceived, 1)); if (marie->stat.last_received_chat_message) { linphone_chat_message_download_file(marie->stat.last_received_chat_message); } - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageExtBodyReceived, 1)); - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneMessageInProgress, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneMessageExtBodyReceived, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &pauline->stat.number_of_LinphoneMessageInProgress, 1)); ms_free(to); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1174,16 +1198,16 @@ static void text_message_with_send_error(void) { linphone_chat_room_send_chat_message(chat_room,message); /* check transient message list: the message should be in it, and should be the only one */ - CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1); - CU_ASSERT_EQUAL(ms_list_nth_data(chat_room->transient_messages,0), message); + BC_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1, int, "%d"); + BC_ASSERT_PTR_EQUAL(ms_list_nth_data(chat_room->transient_messages,0), message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); - /*CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageInProgress,1);*/ - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); + /*BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageInProgress,1, int, "%d");*/ + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0, int, "%d"); /* the message should have been discarded from transient list after an error */ - CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 0); + BC_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 0, int, "%d"); sal_set_send_error(marie->lc->sal, 0); ms_free(to); @@ -1211,8 +1235,8 @@ static void text_message_denied(void) { linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); linphone_chat_room_send_chat_message(chat_room,message); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0, int, "%d"); ms_free(to); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -1240,7 +1264,7 @@ static void info_message_with_args(bool_t with_content) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); info=linphone_core_create_info_message(marie->lc); linphone_info_message_add_header(info,"Weather","still bad"); @@ -1261,26 +1285,26 @@ static void info_message_with_args(bool_t with_content) { linphone_call_send_info_message(linphone_core_get_current_call(marie->lc),info); linphone_info_message_destroy(info); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_inforeceived,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_inforeceived,1)); - CU_ASSERT_PTR_NOT_NULL(pauline->stat.last_received_info_message); + BC_ASSERT_PTR_NOT_NULL(pauline->stat.last_received_info_message); hvalue=linphone_info_message_get_header(pauline->stat.last_received_info_message, "Weather"); content=linphone_info_message_get_content(pauline->stat.last_received_info_message); - CU_ASSERT_PTR_NOT_NULL(hvalue); + BC_ASSERT_PTR_NOT_NULL(hvalue); if (hvalue) - CU_ASSERT_TRUE(strcmp(hvalue,"still bad")==0); + BC_ASSERT_TRUE(strcmp(hvalue,"still bad")==0); if (with_content){ - CU_ASSERT_PTR_NOT_NULL(content); + BC_ASSERT_PTR_NOT_NULL(content); if (content) { - CU_ASSERT_PTR_NOT_NULL(linphone_content_get_buffer(content)); - CU_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content)); - CU_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content)); - if (linphone_content_get_type(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0); - if (linphone_content_get_subtype(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0); - if (linphone_content_get_buffer(content))CU_ASSERT_TRUE(strcmp((const char*)linphone_content_get_buffer(content),info_content)==0); - CU_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content)); + BC_ASSERT_PTR_NOT_NULL(linphone_content_get_buffer(content)); + BC_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content)); + BC_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content)); + if (linphone_content_get_type(content)) BC_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0); + if (linphone_content_get_subtype(content)) BC_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0); + if (linphone_content_get_buffer(content))BC_ASSERT_TRUE(strcmp((const char*)linphone_content_get_buffer(content),info_content)==0); + BC_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content), int, "%d"); } } linphone_core_manager_destroy(marie); @@ -1316,8 +1340,8 @@ static void is_composing_notification(void) { linphone_chat_room_compose(chat_room); wait_for_until(pauline->lc, marie->lc, &dummy, 1, 1500); /*just to sleep while iterating*/ linphone_chat_room_send_message(chat_room, "Composing a message"); - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingActiveReceived, 1)); - CU_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingIdleReceived, 2)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingActiveReceived, 1)); + BC_ASSERT_TRUE(wait_for(pauline->lc, marie->lc, &marie->stat.number_of_LinphoneIsComposingIdleReceived, 2)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1372,9 +1396,9 @@ message_tester_copy_file(const char *from, const char *to) } static int check_no_strange_time(void* data,int argc, char** argv,char** cNames) { - CU_ASSERT_EQUAL(argc, 1); - CU_ASSERT_STRING_EQUAL(cNames[0], "COUNT(*)"); // count of non updated messages should be 0 - CU_ASSERT_STRING_EQUAL(argv[0], "0"); // count of non updated messages should be 0 + BC_ASSERT_EQUAL(argc, 1, int, "%d"); + BC_ASSERT_STRING_EQUAL(cNames[0], "COUNT(*)"); // count of non updated messages should be 0 + BC_ASSERT_STRING_EQUAL(argv[0], "0"); // count of non updated messages should be 0 return 0; } @@ -1386,7 +1410,7 @@ static void message_storage_migration() { snprintf(src_db,sizeof(src_db), "%s/messages.db", bc_tester_read_dir_prefix); snprintf(tmp_db,sizeof(tmp_db), "%s/tmp.db", bc_tester_writable_dir_prefix); - CU_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0); + BC_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0, int, "%d"); // enable to test the performances of the migration step //linphone_core_message_storage_set_debug(marie->lc, TRUE); @@ -1396,10 +1420,10 @@ static void message_storage_migration() { linphone_core_set_chat_database_path(marie->lc, tmp_db); chatrooms = linphone_core_get_chat_rooms(marie->lc); - CU_ASSERT(ms_list_size(chatrooms) > 0); + BC_ASSERT(ms_list_size(chatrooms) > 0); // check that all messages have been migrated to the UTC time storage - CU_ASSERT(sqlite3_exec(marie->lc->db, "SELECT COUNT(*) FROM history WHERE time != '-1';", check_no_strange_time, NULL, NULL) == SQLITE_OK ); + BC_ASSERT(sqlite3_exec(marie->lc->db, "SELECT COUNT(*) FROM history WHERE time != '-1';", check_no_strange_time, NULL, NULL) == SQLITE_OK ); linphone_core_manager_destroy(marie); remove(tmp_db); @@ -1411,7 +1435,7 @@ static void history_message_count_helper(LinphoneChatRoom* chatroom, int x, int if( expected != size ){ ms_warning("History retrieved from %d to %d returned %d records, but expected %d", x, y, size, expected); } - CU_ASSERT_EQUAL(size, expected); + BC_ASSERT_EQUAL(size, expected, int, "%d"); ms_list_free_with_data(messages, (void (*)(void *))linphone_chat_message_unref); @@ -1426,12 +1450,12 @@ static void history_range_full_test(){ snprintf(src_db,sizeof(src_db), "%s/messages.db", bc_tester_read_dir_prefix); snprintf(tmp_db,sizeof(tmp_db), "%s/tmp.db", bc_tester_writable_dir_prefix); - CU_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0); + BC_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0, int, "%d"); linphone_core_set_chat_database_path(marie->lc, tmp_db); chatroom = linphone_core_get_chat_room(marie->lc, jehan_addr); - CU_ASSERT_PTR_NOT_NULL(chatroom); + BC_ASSERT_PTR_NOT_NULL(chatroom); if (chatroom){ // We have 20 tests to perform to fully qualify the function, here they are: history_message_count_helper(chatroom, 0, 0, 1); @@ -1468,47 +1492,47 @@ static void history_messages_count() { snprintf(src_db,sizeof(src_db), "%s/messages.db", bc_tester_read_dir_prefix); snprintf(tmp_db,sizeof(tmp_db), "%s/tmp.db", bc_tester_writable_dir_prefix); - CU_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0); + BC_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0, int, "%d"); linphone_core_set_chat_database_path(marie->lc, tmp_db); chatroom = linphone_core_get_chat_room(marie->lc, jehan_addr); - CU_ASSERT_PTR_NOT_NULL(chatroom); + BC_ASSERT_PTR_NOT_NULL(chatroom); if (chatroom){ messages=linphone_chat_room_get_history(chatroom,10); - CU_ASSERT_EQUAL(ms_list_size(messages), 10); + BC_ASSERT_EQUAL(ms_list_size(messages), 10, int, "%d"); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); messages=linphone_chat_room_get_history(chatroom,1); - CU_ASSERT_EQUAL(ms_list_size(messages), 1); + BC_ASSERT_EQUAL(ms_list_size(messages), 1, int, "%d"); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); messages=linphone_chat_room_get_history(chatroom,0); - CU_ASSERT_EQUAL(linphone_chat_room_get_history_size(chatroom), 1270); - CU_ASSERT_EQUAL(ms_list_size(messages), 1270); + BC_ASSERT_EQUAL(linphone_chat_room_get_history_size(chatroom), 1270, int, "%d"); + BC_ASSERT_EQUAL(ms_list_size(messages), 1270, int, "%d"); /*check the second most recent message*/ - CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->next->data), "Fore and aft follow each other."); + BC_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->next->data), "Fore and aft follow each other."); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test offset+limit: retrieve the 42th latest message only and check its content*/ messages=linphone_chat_room_get_history_range(chatroom, 42, 42); - CU_ASSERT_EQUAL(ms_list_size(messages), 1); - CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->data), "If you open yourself to the Tao is intangible and evasive, yet prefers to keep us at the mercy of the kingdom, then all of the streams of hundreds of valleys because of its limitless possibilities."); + BC_ASSERT_EQUAL(ms_list_size(messages), 1, int, "%d"); + BC_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->data), "If you open yourself to the Tao is intangible and evasive, yet prefers to keep us at the mercy of the kingdom, then all of the streams of hundreds of valleys because of its limitless possibilities."); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test offset without limit*/ messages = linphone_chat_room_get_history_range(chatroom, 1265, -1); - CU_ASSERT_EQUAL(ms_list_size(messages), 1270-1265); + BC_ASSERT_EQUAL(ms_list_size(messages), 1270-1265, int, "%d"); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test limit without offset*/ messages = linphone_chat_room_get_history_range(chatroom, 0, 5); - CU_ASSERT_EQUAL(ms_list_size(messages), 6); + BC_ASSERT_EQUAL(ms_list_size(messages), 6, int, "%d"); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test invalid start*/ messages = linphone_chat_room_get_history_range(chatroom, 1265, 1260); - CU_ASSERT_EQUAL(ms_list_size(messages), 1270-1265); + BC_ASSERT_EQUAL(ms_list_size(messages), 1270-1265, int, "%d"); ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); } linphone_core_manager_destroy(marie); diff --git a/tester/multi_call.c b/tester/multi_call.c index 14f0db9d1..b0fed70cc 100644 --- a/tester/multi_call.c +++ b/tester/multi_call.c @@ -17,10 +17,8 @@ */ -#include #include #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -51,23 +49,23 @@ static void call_waiting_indication_with_param(bool_t enable_caller_privacy) { lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,laure->lc); - CU_ASSERT_TRUE(call_with_caller_params(marie,pauline,marie_params)); + BC_ASSERT_TRUE(call_with_caller_params(marie,pauline,marie_params)); pauline_called_by_marie=linphone_core_get_current_call(pauline->lc); if (enable_caller_privacy) linphone_call_params_set_privacy(laure_params,LinphonePrivacyId); - CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(laure->lc,pauline->identity,laure_params)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(laure->lc,pauline->identity,laure_params)); - CU_ASSERT_TRUE(wait_for(laure->lc + BC_ASSERT_TRUE(wait_for(laure->lc ,pauline->lc ,&pauline->stat.number_of_LinphoneCallIncomingReceived ,2)); - CU_ASSERT_EQUAL(laure->stat.number_of_LinphoneCallOutgoingProgress,1); + BC_ASSERT_EQUAL(laure->stat.number_of_LinphoneCallOutgoingProgress,1, int, "%d"); - CU_ASSERT_TRUE(wait_for(laure->lc + BC_ASSERT_TRUE(wait_for(laure->lc ,pauline->lc ,&laure->stat.number_of_LinphoneCallOutgoingRinging ,1)); @@ -81,25 +79,25 @@ static void call_waiting_indication_with_param(bool_t enable_caller_privacy) { } } - CU_ASSERT_TRUE(wait_for(laure->lc + BC_ASSERT_TRUE(wait_for(laure->lc ,pauline->lc ,&laure->stat.number_of_LinphoneCallConnected ,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc + BC_ASSERT_TRUE(wait_for(pauline->lc ,marie->lc ,&marie->stat.number_of_LinphoneCallPausedByRemote ,1)); if (pauline_called_by_laure && enable_caller_privacy ) - CU_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(pauline_called_by_laure)),LinphonePrivacyId); + BC_ASSERT_EQUAL(linphone_call_params_get_privacy(linphone_call_get_current_params(pauline_called_by_laure)),LinphonePrivacyId, int, "%d"); /*wait a bit for ACK to be sent*/ wait_for_list(lcs,NULL,0,1000); linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,10000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,10000)); linphone_core_manager_destroy(marie); @@ -115,6 +113,70 @@ static void call_waiting_indication_with_privacy(void) { call_waiting_indication_with_param(TRUE); } +static void incoming_call_accepted_when_outgoing_call_in_state(LinphoneCallState state) { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* laure = linphone_core_manager_new( "laure_rc"); + MSList* lcs; + LinphoneCallParams *laure_params=linphone_core_create_default_call_parameters(laure->lc); + LinphoneCallParams *marie_params=linphone_core_create_default_call_parameters(marie->lc); + + lcs=ms_list_append(NULL,marie->lc); + lcs=ms_list_append(lcs,pauline->lc); + lcs=ms_list_append(lcs,laure->lc); + + + if (state==LinphoneCallOutgoingRinging || state==LinphoneCallOutgoingEarlyMedia) { + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(marie->lc,pauline->identity,marie_params)); + + BC_ASSERT_TRUE(wait_for(marie->lc + ,pauline->lc + ,&pauline->stat.number_of_LinphoneCallIncomingReceived + ,1)); + + if (state==LinphoneCallOutgoingEarlyMedia) + linphone_core_accept_early_media(pauline->lc,linphone_core_get_current_call(pauline->lc)); + + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingProgress,1, int, "%d"); + BC_ASSERT_TRUE(wait_for(marie->lc + ,pauline->lc + ,state==LinphoneCallOutgoingEarlyMedia?&marie->stat.number_of_LinphoneCallOutgoingEarlyMedia:&marie->stat.number_of_LinphoneCallOutgoingRinging + ,1)); + } else if (state==LinphoneCallOutgoingProgress) { + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(marie->lc,pauline->identity)); + } else { + ms_error("Unsupported state"); + return; + } + + BC_ASSERT_TRUE(call_with_caller_params(laure,marie,laure_params)); + + + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); + + + linphone_core_terminate_all_calls(marie->lc); + + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,10000)); + + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + linphone_core_manager_destroy(laure); + ms_list_free(lcs); +} +static void incoming_call_accepted_when_outgoing_call_in_progress(void) { + incoming_call_accepted_when_outgoing_call_in_state(LinphoneCallOutgoingProgress); +} +static void incoming_call_accepted_when_outgoing_call_in_outgoing_ringing(void) { + incoming_call_accepted_when_outgoing_call_in_state(LinphoneCallOutgoingRinging); +} +static void incoming_call_accepted_when_outgoing_call_in_outgoing_ringing_early_media(void) { + incoming_call_accepted_when_outgoing_call_in_state(LinphoneCallOutgoingEarlyMedia); +} + static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManager* pauline, LinphoneCoreManager* laure) { stats initial_marie_stat; @@ -129,32 +191,32 @@ static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManag lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,laure->lc); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); marie_call_pauline=linphone_core_get_current_call(marie->lc); pauline_called_by_marie=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_TRUE(pause_call_1(marie,marie_call_pauline,pauline,pauline_called_by_marie)); + BC_ASSERT_TRUE(pause_call_1(marie,marie_call_pauline,pauline,pauline_called_by_marie)); - CU_ASSERT_TRUE(call(marie,laure)); + BC_ASSERT_TRUE(call(marie,laure)); initial_marie_stat=marie->stat; initial_pauline_stat=pauline->stat; initial_laure_stat=laure->stat; marie_call_laure=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL_FATAL(marie_call_laure); + BC_ASSERT_PTR_NOT_NULL_FATAL(marie_call_laure); linphone_core_add_to_conference(marie->lc,marie_call_laure); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallUpdating,initial_marie_stat.number_of_LinphoneCallUpdating+1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallUpdating,initial_marie_stat.number_of_LinphoneCallUpdating+1,5000)); linphone_core_add_to_conference(marie->lc,marie_call_pauline); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallResuming,initial_marie_stat.number_of_LinphoneCallResuming+1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallResuming,initial_marie_stat.number_of_LinphoneCallResuming+1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,initial_pauline_stat.number_of_LinphoneCallStreamsRunning+1,5000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,initial_laure_stat.number_of_LinphoneCallStreamsRunning+1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,initial_marie_stat.number_of_LinphoneCallStreamsRunning+2,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,initial_pauline_stat.number_of_LinphoneCallStreamsRunning+1,5000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,initial_laure_stat.number_of_LinphoneCallStreamsRunning+1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,initial_marie_stat.number_of_LinphoneCallStreamsRunning+2,3000)); - CU_ASSERT_TRUE(linphone_core_is_in_conference(marie->lc)); - CU_ASSERT_EQUAL(linphone_core_get_conference_size(marie->lc),3); + BC_ASSERT_TRUE(linphone_core_is_in_conference(marie->lc)); + BC_ASSERT_EQUAL(linphone_core_get_conference_size(marie->lc),3, int, "%d"); /* * FIXME: check_ice cannot work as it is today because there is no current call for the party that hosts the conference @@ -170,9 +232,9 @@ static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManag linphone_core_terminate_conference(marie->lc); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,10000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,10000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,10000)); @@ -221,7 +283,7 @@ static void simple_call_transfer(void) { lcs=ms_list_append(lcs,laure->lc); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); marie_calling_pauline=linphone_core_get_current_call(marie->lc); pauline_called_by_marie=linphone_core_get_current_call(pauline->lc); @@ -231,35 +293,35 @@ static void simple_call_transfer(void) { linphone_core_transfer_call(pauline->lc,pauline_called_by_marie,laure_identity); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallRefered,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallRefered,1,2000)); /*marie pausing pauline*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallPausing,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPausedByRemote,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallPaused,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallPausing,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPausedByRemote,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallPaused,1,2000)); /*marie calling laure*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); - CU_ASSERT_PTR_NOT_NULL(linphone_call_get_transfer_target_call(marie_calling_pauline)); + BC_ASSERT_PTR_NOT_NULL(linphone_call_get_transfer_target_call(marie_calling_pauline)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallOutgoingInit,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallOutgoingProgress,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallOutgoingInit,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallOutgoingProgress,1,2000)); linphone_core_accept_call(laure->lc,linphone_core_get_current_call(laure->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,2000)); marie_calling_laure=linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL_FATAL(marie_calling_laure); - CU_ASSERT_TRUE(linphone_call_get_transferer_call(marie_calling_laure)==marie_calling_pauline); + BC_ASSERT_PTR_NOT_NULL_FATAL(marie_calling_laure); + BC_ASSERT_TRUE(linphone_call_get_transferer_call(marie_calling_laure)==marie_calling_pauline); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneTransferCallConnected,1,2000)); /*terminate marie to pauline call*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,2000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -279,7 +341,7 @@ static void unattended_call_transfer(void) { lcs=ms_list_append(lcs,laure->lc); - CU_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(call(marie,pauline)); pauline_called_by_marie=linphone_core_get_current_call(marie->lc); reset_counters(&marie->stat); @@ -287,25 +349,25 @@ static void unattended_call_transfer(void) { reset_counters(&laure->stat); linphone_core_transfer_call(marie->lc,pauline_called_by_marie,laure_identity); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); /*marie ends the call */ linphone_core_terminate_call(marie->lc,pauline_called_by_marie); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); /*Pauline starts the transfer*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingInit,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingInit,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); linphone_core_accept_call(laure->lc,linphone_core_get_current_call(laure->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -319,10 +381,10 @@ static void unattended_call_transfer_with_error(void) { LinphoneCall* pauline_called_by_marie; bool_t call_ok=TRUE; MSList* lcs=ms_list_append(NULL,marie->lc); - + lcs=ms_list_append(lcs,pauline->lc); - CU_ASSERT_TRUE((call_ok=call(marie,pauline))); + BC_ASSERT_TRUE((call_ok=call(marie,pauline))); if (call_ok){ pauline_called_by_marie=linphone_core_get_current_call(marie->lc); @@ -330,21 +392,21 @@ static void unattended_call_transfer_with_error(void) { reset_counters(&pauline->stat); linphone_core_transfer_call(marie->lc,pauline_called_by_marie,"unknown_user"); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); /*Pauline starts the transfer*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingInit,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingInit,1,2000)); /* and immediately get an error*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallError,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallError,1,2000)); /*the error must be reported back to marie*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallError,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallError,1,2000)); /*and pauline should resume the call automatically*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallResuming,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallResuming,1,2000)); /*and call should be resumed*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,1,2000)); } linphone_core_manager_destroy(marie); @@ -365,24 +427,24 @@ static void call_transfer_existing_call_outgoing_call(void) { bool_t call_ok=TRUE; const MSList* calls; MSList* lcs=ms_list_append(NULL,marie->lc); - + lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,laure->lc); /*marie call pauline*/ - CU_ASSERT_TRUE((call_ok=call(marie,pauline))); + BC_ASSERT_TRUE((call_ok=call(marie,pauline))); if (call_ok){ marie_call_pauline=linphone_core_get_current_call(marie->lc); pauline_called_by_marie=linphone_core_get_current_call(pauline->lc); /*marie pause pauline*/ - CU_ASSERT_TRUE(pause_call_1(marie,marie_call_pauline,pauline,pauline_called_by_marie)); + BC_ASSERT_TRUE(pause_call_1(marie,marie_call_pauline,pauline,pauline_called_by_marie)); /*marie call laure*/ - CU_ASSERT_TRUE(call(marie,laure)); + BC_ASSERT_TRUE(call(marie,laure)); marie_call_laure=linphone_core_get_current_call(marie->lc); laure_called_by_marie=linphone_core_get_current_call(laure->lc); /*marie pause laure*/ - CU_ASSERT_TRUE(pause_call_1(marie,marie_call_laure,laure,laure_called_by_marie)); + BC_ASSERT_TRUE(pause_call_1(marie,marie_call_laure,laure,laure_called_by_marie)); reset_counters(&marie->stat); reset_counters(&pauline->stat); @@ -390,37 +452,37 @@ static void call_transfer_existing_call_outgoing_call(void) { linphone_core_transfer_call_to_another(marie->lc,marie_call_pauline,marie_call_laure); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallRefered,1,2000)); /*pauline pausing marie*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPausing,1,4000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPaused,1,4000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPausing,1,4000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPaused,1,4000)); /*pauline calling laure*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallOutgoingInit,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallOutgoingProgress,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingProgress,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallOutgoingInit,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallIncomingReceived,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallOutgoingRinging,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallOutgoingProgress,1,2000)); /*laure accept call*/ for(calls=linphone_core_get_calls(laure->lc);calls!=NULL;calls=calls->next) { lcall = (LinphoneCall*)calls->data; if (linphone_call_get_state(lcall) == LinphoneCallIncomingReceived) { - CU_ASSERT_EQUAL(linphone_call_get_replaced_call(lcall),laure_called_by_marie); + BC_ASSERT_PTR_EQUAL(linphone_call_get_replaced_call(lcall),laure_called_by_marie); linphone_core_accept_call(laure->lc,lcall); break; } } - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallConnected,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneTransferCallConnected,1,2000)); /*terminate marie to pauline/laure call*/ - CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,2,2000)); - CU_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,2,2000)); + BC_ASSERT_TRUE(wait_for_list(lcs,&laure->stat.number_of_LinphoneCallEnd,1,2000)); } linphone_core_manager_destroy(marie); @@ -437,7 +499,10 @@ test_t multi_call_tests[] = { { "Simple call transfer", simple_call_transfer }, { "Unattended call transfer", unattended_call_transfer }, { "Unattended call transfer with error", unattended_call_transfer_with_error }, - { "Call transfer existing call outgoing call", call_transfer_existing_call_outgoing_call } + { "Call transfer existing call outgoing call", call_transfer_existing_call_outgoing_call }, + { "Incoming call accepted when outgoing call in progress",incoming_call_accepted_when_outgoing_call_in_progress}, + { "Incoming call accepted when outgoing call in outgoing ringing",incoming_call_accepted_when_outgoing_call_in_outgoing_ringing}, + { "Incoming call accepted when outgoing call in outgoing ringing early media",incoming_call_accepted_when_outgoing_call_in_outgoing_ringing_early_media}, }; test_suite_t multi_call_test_suite = { diff --git a/tester/multicast_call_tester.c b/tester/multicast_call_tester.c index e5a05c11e..3453463a0 100644 --- a/tester/multicast_call_tester.c +++ b/tester/multicast_call_tester.c @@ -52,15 +52,15 @@ static void call_multicast_base(bool_t video) { linphone_core_set_audio_multicast_addr(pauline->lc,"224.1.2.3"); linphone_core_enable_audio_multicast(pauline->lc,TRUE); - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); wait_for_until(marie->lc, pauline->lc, NULL, 1, 3000); if (linphone_core_get_current_call(marie->lc)) { - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc))->download_bandwidth>70); + BC_ASSERT_GREATER(linphone_call_get_audio_stats(linphone_core_get_current_call(marie->lc))->download_bandwidth,70,int,"%d"); if (video) { /*check video path*/ linphone_call_set_next_video_frame_decoded_callback(linphone_core_get_current_call(marie->lc),linphone_call_cb,marie->lc); linphone_call_send_vfu_request(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); + BC_ASSERT_TRUE( wait_for(marie->lc,pauline->lc,&marie->stat.number_of_IframeDecoded,1)); } end_call(marie,pauline); @@ -69,7 +69,7 @@ static void call_multicast_base(bool_t video) { linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -96,6 +96,7 @@ static void early_media_with_multicast_base(bool_t video) { int begin; LinphoneVideoPolicy marie_policy, pauline_policy; LpConfig *marie_lp; + LinphoneCallParams *params; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); @@ -138,8 +139,8 @@ static void early_media_with_multicast_base(bool_t video) { linphone_core_invite_address(marie->lc, pauline->identity); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); if (linphone_core_inc_invite_pending(pauline->lc)) { @@ -150,8 +151,8 @@ static void early_media_with_multicast_base(bool_t video) { } linphone_core_accept_early_media(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); - CU_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000) ); if (linphone_core_inc_invite_pending(pauline2->lc)) { /* send a 183 to initiate the early media */ @@ -161,28 +162,75 @@ static void early_media_with_multicast_base(bool_t video) { } linphone_core_accept_early_media(pauline2->lc, linphone_core_get_current_call(pauline2->lc)); - CU_ASSERT_TRUE( wait_for_list(lcs, &pauline2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); + BC_ASSERT_TRUE( wait_for_list(lcs, &pauline2->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000) ); } wait_for_list(lcs, &dummy, 1, 3000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth<90); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline->lc))->download_bandwidth<90); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline2->lc))->download_bandwidth>70); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline2->lc))->download_bandwidth<90); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline2->lc))->download_bandwidth>70); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(linphone_core_get_current_call(pauline2->lc))->download_bandwidth<90); + BC_ASSERT_TRUE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + BC_ASSERT_TRUE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + if (video) { + BC_ASSERT_TRUE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + BC_ASSERT_TRUE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + } if (video) { - CU_ASSERT_TRUE( wait_for_list(lcs,&pauline->stat.number_of_IframeDecoded,1,2000)); - CU_ASSERT_TRUE( wait_for_list(lcs,&pauline2->stat.number_of_IframeDecoded,1,2000)); + BC_ASSERT_TRUE( wait_for_list(lcs,&pauline->stat.number_of_IframeDecoded,1,2000)); + BC_ASSERT_TRUE( wait_for_list(lcs,&pauline2->stat.number_of_IframeDecoded,1,2000)); } linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline2->stat.number_of_LinphoneCallEnd, 1,1000)); + BC_ASSERT_TRUE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + BC_ASSERT_TRUE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + if (video) { + BC_ASSERT_TRUE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + BC_ASSERT_TRUE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + } + params=linphone_call_params_copy(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc))); + + linphone_call_params_enable_audio_multicast(params,FALSE); + linphone_call_params_enable_video_multicast(params,FALSE); + linphone_core_enable_video_capture(pauline->lc, TRUE); + linphone_core_enable_video_display(pauline->lc, TRUE); + linphone_core_enable_video_capture(marie->lc, TRUE); + linphone_core_enable_video_display(marie->lc, TRUE); + + linphone_core_update_call( pauline->lc + , linphone_core_get_current_call(pauline->lc) + , params); + linphone_call_params_destroy(params); + + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 2,1000)); + + BC_ASSERT_FALSE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + BC_ASSERT_FALSE(linphone_call_params_audio_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + + check_media_direction( pauline + , linphone_core_get_current_call(pauline->lc) + , lcs + ,LinphoneMediaDirectionSendRecv + , video?LinphoneMediaDirectionSendRecv:LinphoneMediaDirectionInactive); + check_media_direction( marie + , linphone_core_get_current_call(marie->lc) + , lcs + ,LinphoneMediaDirectionSendRecv + , video?LinphoneMediaDirectionSendRecv:LinphoneMediaDirectionInactive); + + if (video) { + BC_ASSERT_FALSE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)))); + BC_ASSERT_FALSE(linphone_call_params_video_multicast_enabled(linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)))); + } end_call(marie,pauline); } ms_free(lcs); @@ -191,7 +239,7 @@ static void early_media_with_multicast_base(bool_t video) { linphone_core_manager_destroy(pauline2); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_EQUAL(leaked_objects,0); + BC_ASSERT_EQUAL(leaked_objects,0, int, "%d"); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } diff --git a/tester/offeranswer_tester.c b/tester/offeranswer_tester.c index 8225faf9d..67d9c9d62 100644 --- a/tester/offeranswer_tester.c +++ b/tester/offeranswer_tester.c @@ -16,11 +16,8 @@ along with this program. If not, see . */ - -#include #include #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -46,13 +43,13 @@ static void start_with_no_config(void){ int speex16_codec_pos=get_codec_position(codecs, "speex", 16000); PayloadType *pt; opus_codec_pos=get_codec_position(codecs, "opus", 48000); - if (opus_codec_pos!=-1) CU_ASSERT_TRUE(opus_codec_pos==0); - CU_ASSERT_TRUE(speex16_codec_poslc,"pcmu",-1); disable_all_audio_codecs_except_one(pauline->lc,"pcmu",-1); - + /*marie set a fantasy number to PCMU*/ linphone_core_set_payload_type_number(marie->lc, linphone_core_find_payload_type(marie->lc, "PCMU", 8000, -1), 104); - - CU_ASSERT_TRUE(call(marie,pauline)); + + BC_ASSERT_TRUE(call(marie,pauline)); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); if (pauline_call){ LinphoneCallParams *params; check_payload_type_numbers(linphone_core_get_current_call(marie->lc), pauline_call, 104); /*make a reinvite in the other direction*/ - linphone_core_update_call(pauline->lc, pauline_call, + linphone_core_update_call(pauline->lc, pauline_call, params=linphone_core_create_call_params(pauline->lc, pauline_call)); linphone_call_params_unref(params); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallUpdating,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallUpdatedByRemote,1)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallUpdating,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallUpdatedByRemote,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); /*payload type numbers shall remain the same*/ check_payload_type_numbers(linphone_core_get_current_call(marie->lc), pauline_call, 104); } @@ -116,7 +113,7 @@ static void simple_call_with_different_codec_mappings(void) { linphone_core_manager_destroy(pauline); leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -137,20 +134,20 @@ static void call_failed_because_of_codecs(void) { disable_all_audio_codecs_except_one(pauline->lc,"pcma",-1); out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); /*flexisip will retain the 488 until the "urgent reply" timeout (I.E 5s) arrives.*/ - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,7000)); - CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonNotAcceptable); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallReleased,0); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,7000)); + BC_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonNotAcceptable, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallReleased,0, int, "%d"); linphone_call_unref(out_call); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } leaked_objects=belle_sip_object_get_object_count()-begin; - CU_ASSERT_TRUE(leaked_objects==0); + BC_ASSERT_TRUE(leaked_objects==0); if (leaked_objects>0){ belle_sip_object_dump_active_objects(); } @@ -194,23 +191,23 @@ static void profile_call_base(bool_t avpf1, LinphoneMediaEncryption srtp1,bool_t } - CU_ASSERT_TRUE(call(marie, pauline)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_TRUE(call(marie, pauline)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1)); if (linphone_core_get_current_call(marie->lc)) { params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile); + BC_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile); } if (linphone_core_get_current_call(pauline->lc)) { params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc)); - CU_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile); + BC_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile); } linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected, 1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallConnected, 1); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected, 1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallConnected, 1, int, "%d"); end: linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(marie); diff --git a/tester/player_tester.c b/tester/player_tester.c index e72cac9cd..909fdffe9 100644 --- a/tester/player_tester.c +++ b/tester/player_tester.c @@ -39,11 +39,11 @@ static void play_file(const char *filename, bool_t unsupported_format, const cha bool_t eof = FALSE; lc_manager = linphone_core_manager_new("marie_rc"); - CU_ASSERT_PTR_NOT_NULL(lc_manager); + BC_ASSERT_PTR_NOT_NULL(lc_manager); if(lc_manager == NULL) return; player = linphone_core_create_local_player(lc_manager->lc, ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()), video_stream_get_default_video_renderer(), 0); - CU_ASSERT_PTR_NOT_NULL(player); + BC_ASSERT_PTR_NOT_NULL(player); if(player == NULL) goto fail; res = linphone_player_open(player, filename, eof_callback, &eof); @@ -51,17 +51,17 @@ static void play_file(const char *filename, bool_t unsupported_format, const cha || (audio_mime == NULL && video_mime == NULL) || (video_mime == NULL && audio_mime && !ms_filter_codec_supported(audio_mime)) || (audio_mime == NULL && video_mime && !ms_filter_codec_supported(video_mime))) { - CU_ASSERT_EQUAL(res, -1); + BC_ASSERT_EQUAL(res, -1, int, "%d"); } else { - CU_ASSERT_EQUAL(res, 0); + BC_ASSERT_EQUAL(res, 0, int, "%d"); } if(res == -1) goto fail; res = linphone_player_start(player); - CU_ASSERT_EQUAL(res, 0); + BC_ASSERT_EQUAL(res, 0, int, "%d"); if(res == -1) goto fail; - CU_ASSERT_TRUE(wait_for_eof(&eof, &time, 100, 13000)); + BC_ASSERT_TRUE(wait_for_eof(&eof, &time, 100, 13000)); linphone_player_close(player); diff --git a/tester/presence_tester.c b/tester/presence_tester.c index 3b711e52e..ef16102a0 100644 --- a/tester/presence_tester.c +++ b/tester/presence_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -169,11 +168,11 @@ static bool_t subscribe_to_callee_presence(LinphoneCoreManager* caller_mgr,Linph result&=wait_for(caller_mgr->lc,callee_mgr->lc,&callee_mgr->stat.number_of_LinphonePresenceActivityOnline,initial_callee.number_of_LinphonePresenceActivityOnline+1); */ - CU_ASSERT_EQUAL(callee_mgr->stat.number_of_NewSubscriptionRequest,initial_callee.number_of_NewSubscriptionRequest+1); + BC_ASSERT_EQUAL(callee_mgr->stat.number_of_NewSubscriptionRequest,initial_callee.number_of_NewSubscriptionRequest+1, int, "%d"); /*without proxy, callee cannot subscribe to caller - CU_ASSERT_EQUAL(callee_mgr->stat.number_of_NotifyReceived,initial_callee.number_of_NotifyReceived+1); + BC_ASSERT_EQUAL(callee_mgr->stat.number_of_NotifyReceived,initial_callee.number_of_NotifyReceived+1, int, "%d"); */ - CU_ASSERT_EQUAL(caller_mgr->stat.number_of_NotifyReceived,initial_caller.number_of_NotifyReceived+1); + BC_ASSERT_EQUAL(caller_mgr->stat.number_of_NotifyReceived,initial_caller.number_of_NotifyReceived+1, int, "%d"); ms_free(identity); return result; @@ -187,27 +186,27 @@ static void subscribe_failure_handle_by_app(void) { char* lf_identity=linphone_address_as_string_uri_only(pauline->identity); linphone_core_get_default_proxy(marie->lc,&config); - CU_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); + BC_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,1); /*just to wait for unsubscription even if not notified*/ sal_set_recv_error(marie->lc->sal, 0); /*simulate an error*/ - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneRegistrationProgress,2)); - CU_ASSERT_EQUAL(linphone_proxy_config_get_error(config),LinphoneReasonIOError); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneRegistrationProgress,2)); + BC_ASSERT_EQUAL(linphone_proxy_config_get_error(config),LinphoneReasonIOError, int, "%d"); sal_set_recv_error(marie->lc->sal, 1); lf = linphone_core_get_friend_by_address(marie->lc,lf_identity); linphone_friend_edit(lf); linphone_friend_enable_subscribes(lf,FALSE); /*disable subscription*/ linphone_friend_done(lf); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneRegistrationOk,2)); /*wait for register ok*/ + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneRegistrationOk,2)); /*wait for register ok*/ linphone_friend_edit(lf); linphone_friend_enable_subscribes(lf,TRUE); linphone_friend_done(lf); - CU_ASSERT_FALSE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,2)); /*just to wait for unsubscription even if not notified*/ + BC_ASSERT_FALSE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,2)); /*just to wait for unsubscription even if not notified*/ linphone_core_manager_destroy(marie); - CU_ASSERT_FALSE(wait_for(NULL,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,3)); /*just to wait for unsubscription even if not notified*/ + BC_ASSERT_FALSE(wait_for(NULL,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,3)); /*just to wait for unsubscription even if not notified*/ linphone_core_manager_destroy(pauline); } @@ -216,12 +215,12 @@ static void simple_subscribe(void) { LinphoneCoreManager* marie = presence_linphone_core_manager_new("marie"); LinphoneCoreManager* pauline = presence_linphone_core_manager_new("pauline"); - CU_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); + BC_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); linphone_core_manager_destroy(marie); /*unsubscribe is not reported ?*/ - CU_ASSERT_FALSE(wait_for(NULL,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,2)); /*just to wait for unsubscription even if not notified*/ + BC_ASSERT_FALSE(wait_for(NULL,pauline->lc,&pauline->stat.number_of_NewSubscriptionRequest,2)); /*just to wait for unsubscription even if not notified*/ linphone_core_manager_destroy(pauline); } @@ -244,18 +243,18 @@ static void call_with_presence(void) { LinphoneCoreManager* pauline = presence_linphone_core_manager_new("pauline"); LinphoneVideoPolicy pol={0}; linphone_core_set_video_policy(marie->lc,&pol); - CU_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); - CU_ASSERT_TRUE(subscribe_to_callee_presence(pauline,marie)); + BC_ASSERT_TRUE(subscribe_to_callee_presence(marie,pauline)); + BC_ASSERT_TRUE(subscribe_to_callee_presence(pauline,marie)); - CU_ASSERT_TRUE(call(marie,pauline)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityOnThePhone,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphonePresenceActivityOnThePhone,1)); + BC_ASSERT_TRUE(call(marie,pauline)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityOnThePhone,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphonePresenceActivityOnThePhone,1)); reset_counters(&marie->stat); reset_counters(&pauline->stat); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphonePresenceActivityOnline,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityOnline,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphonePresenceActivityOnline,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityOnline,1)); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -277,48 +276,48 @@ static void presence_information(void) { char *contact2; time_t current_timestamp, presence_timestamp; - CU_ASSERT_TRUE(subscribe_to_callee_presence(marie, pauline)); + BC_ASSERT_TRUE(subscribe_to_callee_presence(marie, pauline)); /* Presence activity without description. */ presence = linphone_presence_model_new_with_activity(LinphonePresenceActivityDinner, NULL); linphone_core_set_presence_model(pauline->lc, presence); wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityDinner,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityDinner, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityDinner, 1, int, "%d"); activity = linphone_presence_model_get_activity(marie->stat.last_received_presence); - CU_ASSERT_PTR_NOT_NULL(activity); - CU_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivityDinner); + BC_ASSERT_PTR_NOT_NULL(activity); + BC_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivityDinner, int, "%d"); description = linphone_presence_activity_get_description(activity); - CU_ASSERT_PTR_NULL(description); + BC_ASSERT_PTR_NULL(description); /* Presence activity with description. */ presence = linphone_presence_model_new_with_activity(LinphonePresenceActivitySteering, bike_description); linphone_core_set_presence_model(pauline->lc, presence); wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivitySteering,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivitySteering, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivitySteering, 1, int, "%d"); activity = linphone_presence_model_get_activity(marie->stat.last_received_presence); - CU_ASSERT_PTR_NOT_NULL(activity); - CU_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivitySteering); + BC_ASSERT_PTR_NOT_NULL(activity); + BC_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivitySteering, int, "%d"); description = linphone_presence_activity_get_description(activity); - CU_ASSERT_PTR_NOT_NULL(description); - if (description != NULL) CU_ASSERT_EQUAL(strcmp(description, bike_description), 0); + BC_ASSERT_PTR_NOT_NULL(description); + if (description != NULL) BC_ASSERT_EQUAL(strcmp(description, bike_description), 0, int, "%d"); /* Presence activity with description and note. */ presence = linphone_presence_model_new_with_activity_and_note(LinphonePresenceActivityVacation, NULL, vacation_note, vacation_lang); linphone_core_set_presence_model(pauline->lc, presence); wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityVacation,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityVacation, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityVacation, 1, int, "%d"); activity = linphone_presence_model_get_activity(marie->stat.last_received_presence); - CU_ASSERT_PTR_NOT_NULL(activity); - CU_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivityVacation); + BC_ASSERT_PTR_NOT_NULL(activity); + BC_ASSERT_EQUAL(linphone_presence_activity_get_type(activity), LinphonePresenceActivityVacation, int, "%d"); description = linphone_presence_activity_get_description(activity); - CU_ASSERT_PTR_NULL(description); + BC_ASSERT_PTR_NULL(description); note = linphone_presence_model_get_note(marie->stat.last_received_presence, NULL); - CU_ASSERT_PTR_NOT_NULL(note); + BC_ASSERT_PTR_NOT_NULL(note); if (note != NULL) { note_content = linphone_presence_note_get_content(note); - CU_ASSERT_PTR_NOT_NULL(note_content); + BC_ASSERT_PTR_NOT_NULL(note_content); if (note_content != NULL) { - CU_ASSERT_EQUAL(strcmp(note_content, vacation_note), 0); + BC_ASSERT_EQUAL(strcmp(note_content, vacation_note), 0, int, "%d"); } } @@ -327,11 +326,11 @@ static void presence_information(void) { linphone_presence_model_set_contact(presence, contact); linphone_core_set_presence_model(pauline->lc, presence); wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityOnThePhone,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityOnThePhone, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityOnThePhone, 1, int, "%d"); contact2 = linphone_presence_model_get_contact(presence); - CU_ASSERT_PTR_NOT_NULL(contact2); + BC_ASSERT_PTR_NOT_NULL(contact2); if (contact2 != NULL) { - CU_ASSERT_EQUAL(strcmp(contact, contact2), 0); + BC_ASSERT_EQUAL(strcmp(contact, contact2), 0, int, "%d"); ms_free(contact2); } @@ -340,9 +339,9 @@ static void presence_information(void) { presence = linphone_presence_model_new_with_activity(LinphonePresenceActivityShopping, NULL); linphone_core_set_presence_model(pauline->lc, presence); wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePresenceActivityShopping,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityShopping, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePresenceActivityShopping, 1, int, "%d"); presence_timestamp = linphone_presence_model_get_timestamp(presence); - CU_ASSERT_TRUE(presence_timestamp >= current_timestamp); + BC_ASSERT_TRUE(presence_timestamp >= current_timestamp); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -367,7 +366,7 @@ static void test_subscribe_notify_publish(void) { /*wait for subscribe acknowledgment*/ wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_NotifyReceived,1,2000); - CU_ASSERT_EQUAL(LinphoneStatusOffline,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusOffline,linphone_friend_get_status(lf), int, "%d"); /*enable publish*/ @@ -380,23 +379,23 @@ static void test_subscribe_notify_publish(void) { /*wait for marie status*/ wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_NotifyReceived,2,2000); - CU_ASSERT_EQUAL(LinphoneStatusOnline,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusOnline,linphone_friend_get_status(lf), int, "%d"); presence =linphone_presence_model_new_with_activity(LinphonePresenceActivityBusy,NULL); linphone_core_set_presence_model(marie->lc,presence); /*wait for new status*/ wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_NotifyReceived,3,2000); - CU_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf), int, "%d"); /*wait for refresh*/ wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_NotifyReceived,4,5000); - CU_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf), int, "%d"); /*linphone_core_remove_friend(pauline->lc,lf);*/ /*wait for final notify*/ /*wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_NotifyReceived,4,5000); - CU_ASSERT_EQUAL(LinphonePresenceActivityOffline,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphonePresenceActivityOffline,linphone_friend_get_status(lf), int, "%d"); */ linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -426,7 +425,7 @@ static void test_forked_subscribe_notify_publish(void) { /*wait for subscribe acknowledgment*/ wait_for_list(lcs,&pauline->stat.number_of_NotifyReceived,1,2000); - CU_ASSERT_EQUAL(LinphoneStatusOffline,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusOffline,linphone_friend_get_status(lf), int, "%d"); /*enable publish*/ @@ -445,21 +444,21 @@ static void test_forked_subscribe_notify_publish(void) { /*wait for marie status*/ wait_for_list(lcs,&pauline->stat.number_of_NotifyReceived,3,2000); - CU_ASSERT_EQUAL(LinphoneStatusOnline,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusOnline,linphone_friend_get_status(lf), int, "%d"); presence =linphone_presence_model_new_with_activity(LinphonePresenceActivityBusy,NULL); linphone_core_set_presence_model(marie->lc,presence); /*wait for new status*/ wait_for_list(lcs,&pauline->stat.number_of_NotifyReceived,4,2000); - CU_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf)); + BC_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf), int, "%d"); presence =linphone_presence_model_new_with_activity( LinphonePresenceActivityMeeting,NULL); linphone_core_set_presence_model(marie2->lc,presence); /*wait for new status*/ wait_for_list(lcs,&pauline->stat.number_of_NotifyReceived,5,2000); - CU_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf)); /*because liblinphone compositor is very simple for now (I.E only take first occurence)*/ + BC_ASSERT_EQUAL(LinphoneStatusBusy,linphone_friend_get_status(lf), int, "%d"); /*because liblinphone compositor is very simple for now (I.E only take first occurence)*/ linphone_core_manager_destroy(marie); linphone_core_manager_destroy(marie2); diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index 33df384be..e5c97b8ee 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -34,57 +34,59 @@ void on_report_send_mandatory(const LinphoneCall *call, int stream_type, const L }else{ ms = (MediaStream*)call->videostream; } - CU_ASSERT_TRUE( + BC_ASSERT_TRUE( __strstr(body, "VQIntervalReport\r\n") == body || __strstr(body, "VQSessionReport\r\n") == body || __strstr(body, "VQSessionReport: CallTerm\r\n") == body ); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "CallID:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalID:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteID:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "OrigID:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalGroup:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteGroup:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalAddr:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteAddr:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "START=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "STOP=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "CallID:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalID:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteID:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "OrigID:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalGroup:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteGroup:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalAddr:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteAddr:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "IP=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PORT=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SSRC=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "START=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "STOP=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PT=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PD=")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SR=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PT=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PD=")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SR=")); /* We should have not reached RemoteMetrics section yet */ - CU_ASSERT_TRUE(!remote_metrics_start || body < remote_metrics_start); + BC_ASSERT_TRUE(!remote_metrics_start || body < remote_metrics_start); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "DialogID:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "DialogID:")); if (report->remote_metrics.rtcp_sr_count&&ms!=NULL&&ms->rc!=NULL){ - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "AdaptiveAlg:")); + /* Hack: reset rtcp_sr_count to 0 because in case of interval reports, we need one RTCP SR by interval */ + report->remote_metrics.rtcp_sr_count=0; + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "AdaptiveAlg:")); } } char * on_report_send_verify_metrics(const reporting_content_metrics_t *metrics, char * body){ if (metrics->rtcp_xr_count){ - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "JitterBuffer:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PacketLoss:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "SessionDesc:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "JitterBuffer:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "PacketLoss:")); } if (metrics->rtcp_sr_count+metrics->rtcp_xr_count>0){ - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Delay:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Delay:")); } if (metrics->rtcp_xr_count){ - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "QualityEst:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "QualityEst:")); } return body; @@ -95,8 +97,8 @@ void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, int stream_type char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; on_report_send_mandatory(call,stream_type,content); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); - CU_ASSERT_TRUE(!remote_metrics_start || on_report_send_verify_metrics(&report->local_metrics,body) < remote_metrics_start); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "LocalMetrics:")); + BC_ASSERT_TRUE(!remote_metrics_start || on_report_send_verify_metrics(&report->local_metrics,body) < remote_metrics_start); } void on_report_send_with_rtcp_xr_remote(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ char * body = (char*)linphone_content_get_buffer(content); @@ -104,8 +106,8 @@ void on_report_send_with_rtcp_xr_remote(const LinphoneCall *call, int stream_typ on_report_send_mandatory(call,stream_type,content); if (report->remote_metrics.rtcp_sr_count+report->remote_metrics.rtcp_xr_count>0){ - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteMetrics:")); - CU_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "RemoteMetrics:")); + BC_ASSERT_PTR_NOT_NULL(body=__strstr(body, "Timestamps:")); on_report_send_verify_metrics(&report->remote_metrics,body); } } @@ -125,15 +127,15 @@ bool_t create_call_for_quality_reporting_tests( bool_t call_succeeded = call_with_params(marie,pauline,params_marie,params_pauline); - CU_ASSERT_TRUE(call_succeeded); + BC_ASSERT_TRUE(call_succeeded); if (call_succeeded) { if (call_marie) { *call_marie = linphone_core_get_current_call(marie->lc); - CU_ASSERT_PTR_NOT_NULL(*call_marie); + BC_ASSERT_PTR_NOT_NULL(*call_marie); } if (call_pauline) { *call_pauline = linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(*call_pauline); + BC_ASSERT_PTR_NOT_NULL(*call_pauline); } } return call_succeeded; @@ -147,17 +149,17 @@ static void quality_reporting_not_used_without_config() { if (create_call_for_quality_reporting_tests(marie, pauline, &call_marie, &call_pauline, NULL, NULL)) { // marie has stats collection enabled but pauline has not - CU_ASSERT_TRUE(linphone_proxy_config_quality_reporting_enabled(call_marie->dest_proxy)); - CU_ASSERT_FALSE(linphone_proxy_config_quality_reporting_enabled(call_pauline->dest_proxy)); + BC_ASSERT_TRUE(linphone_proxy_config_quality_reporting_enabled(call_marie->dest_proxy)); + BC_ASSERT_FALSE(linphone_proxy_config_quality_reporting_enabled(call_pauline->dest_proxy)); - CU_ASSERT_EQUAL(strcmp("sip:collector@sip.example.org", - linphone_proxy_config_get_quality_reporting_collector(call_marie->dest_proxy)), 0); + BC_ASSERT_STRING_EQUAL(linphone_proxy_config_get_quality_reporting_collector(call_marie->dest_proxy), + "sip:collector@sip.example.org"); // this field should be already filled - CU_ASSERT_PTR_NOT_NULL(call_marie->log->reporting.reports[0]->info.local_addr.ip); + BC_ASSERT_PTR_NOT_NULL(call_marie->log->reporting.reports[0]->info.local_addr.ip); // but not this one since it is updated at the end of call - CU_ASSERT_PTR_NULL(call_marie->log->reporting.reports[0]->dialog_id); + BC_ASSERT_PTR_NULL(call_marie->log->reporting.reports[0]->dialog_id); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -173,13 +175,13 @@ static void quality_reporting_not_sent_if_call_not_started() { out_call = linphone_core_invite(marie->lc,"pauline"); linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallError,1, 10000)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallError,1); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallError,1, 10000)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallError,1, int, "%d"); if (ms_list_size(linphone_core_get_call_logs(marie->lc))>0) { out_call_log=(LinphoneCallLog*)(linphone_core_get_call_logs(marie->lc)->data); - CU_ASSERT_PTR_NOT_NULL(out_call_log); - CU_ASSERT_EQUAL(linphone_call_log_get_status(out_call_log),LinphoneCallAborted); + BC_ASSERT_PTR_NOT_NULL(out_call_log); + BC_ASSERT_EQUAL(linphone_call_log_get_status(out_call_log),LinphoneCallAborted, int, "%d"); } linphone_call_unref(out_call); @@ -187,8 +189,8 @@ static void quality_reporting_not_sent_if_call_not_started() { wait_for_until(marie->lc,NULL,NULL,0,1000); // since the callee was busy, there should be no publish to do - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0, int, "%d"); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -205,8 +207,8 @@ static void quality_reporting_not_sent_if_low_bandwidth() { if (create_call_for_quality_reporting_tests(marie, pauline, NULL, NULL, marie_params, NULL)) { linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0, int, "%d"); } linphone_call_params_destroy(marie_params); linphone_core_manager_destroy(marie); @@ -230,9 +232,9 @@ static void quality_reporting_invalid_report() { linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1)); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishError,1,3000)); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0); + BC_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishError,1,3000)); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0, int, "%d"); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -250,17 +252,17 @@ static void quality_reporting_at_call_termination() { linphone_core_terminate_all_calls(marie->lc); // now dialog id should be filled - CU_ASSERT_PTR_NOT_NULL(call_marie->log->reporting.reports[0]->dialog_id); + BC_ASSERT_PTR_NOT_NULL(call_marie->log->reporting.reports[0]->dialog_id); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallReleased,1, 10000)); - CU_ASSERT_TRUE(wait_for_until(pauline->lc,NULL,&pauline->stat.number_of_LinphoneCallReleased,1, 10000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallReleased,1, 10000)); + BC_ASSERT_TRUE(wait_for_until(pauline->lc,NULL,&pauline->stat.number_of_LinphoneCallReleased,1, 10000)); - CU_ASSERT_PTR_NULL(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_PTR_NULL(linphone_core_get_current_call(pauline->lc)); + BC_ASSERT_PTR_NULL(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_NULL(linphone_core_get_current_call(pauline->lc)); // PUBLISH submission to the collector should be ok - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphonePublishProgress,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphonePublishOk,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphonePublishProgress,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphonePublishOk,1)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -276,12 +278,12 @@ static void quality_reporting_interval_report() { linphone_reporting_set_on_report_send(call_marie, on_report_send_mandatory); linphone_proxy_config_set_quality_reporting_interval(call_marie->dest_proxy, 10); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(marie->lc)); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(pauline->lc)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(marie->lc)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(pauline->lc)); // PUBLISH submission to the collector should be ok - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,3,60000)); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,3,60000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,3,60000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,3,60000)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -307,25 +309,25 @@ static void quality_reporting_session_report_if_video_stopped() { if (create_call_for_quality_reporting_tests(marie, pauline, &call_marie, &call_pauline, marie_params, pauline_params)) { linphone_reporting_set_on_report_send(call_marie, on_report_send_with_rtcp_xr_local); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishProgress,0, int, "%d"); + BC_ASSERT_EQUAL(marie->stat.number_of_LinphonePublishOk,0, int, "%d"); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,NULL,0,3000)); - CU_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(call_pauline))); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,NULL,0,3000)); + BC_ASSERT_TRUE(linphone_call_params_video_enabled(linphone_call_get_current_params(call_pauline))); /*remove video*/ linphone_call_params_enable_video(pauline_params,FALSE); linphone_core_update_call(pauline->lc,call_pauline,pauline_params); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1,5000)); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,1,5000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,1,5000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,1,5000)); - CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(call_pauline))); + BC_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(call_pauline))); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,2,5000)); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,2,5000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,2,5000)); + BC_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,2,5000)); } linphone_call_params_destroy(marie_params); linphone_call_params_destroy(pauline_params); diff --git a/tester/rcfiles/laure_rc b/tester/rcfiles/laure_rc index 2b6ce617a..283f917f7 100644 --- a/tester/rcfiles/laure_rc +++ b/tester/rcfiles/laure_rc @@ -42,3 +42,5 @@ echocancellation=0 #to not overload cpu in case of VG [net] dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org + diff --git a/tester/rcfiles/marie_early_rc b/tester/rcfiles/marie_early_rc index f1866026b..efa5408bb 100644 --- a/tester/rcfiles/marie_early_rc +++ b/tester/rcfiles/marie_early_rc @@ -42,4 +42,8 @@ enabled=0 self_view=0 automatically_initiate=0 automatically_accept=0 -device=StaticImage: Static picture \ No newline at end of file +device=StaticImage: Static picture + +[net] +stun_server=stun.linphone.org + diff --git a/tester/rcfiles/marie_rc b/tester/rcfiles/marie_rc index 5dec5f724..fe9687c36 100644 --- a/tester/rcfiles/marie_rc +++ b/tester/rcfiles/marie_rc @@ -51,3 +51,5 @@ echocancellation=0 #to not overload cpu in case of VG [net] dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org + diff --git a/tester/rcfiles/marie_sips_rc b/tester/rcfiles/marie_sips_rc index 7a935d4cb..f67cca50d 100644 --- a/tester/rcfiles/marie_sips_rc +++ b/tester/rcfiles/marie_sips_rc @@ -51,3 +51,4 @@ echocancellation=0 #to not overload cpu in case of VG [net] dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org diff --git a/tester/rcfiles/multi_account_rc b/tester/rcfiles/multi_account_rc index a78a5bc16..8aefbfcaf 100644 --- a/tester/rcfiles/multi_account_rc +++ b/tester/rcfiles/multi_account_rc @@ -51,5 +51,14 @@ reg_expires=3600 reg_sendregister=1 publish=0 dial_escape_plus=0 +realm=auth1.example.org +[proxy_3] +reg_proxy=auth1.example.org +reg_identity=sip:liblinphone_tester@auth1.example.org +reg_expires=600 +reg_sendregister=1 +publish=0 +dial_escape_plus=0 +realm=auth1.example.org diff --git a/tester/rcfiles/pauline_rc b/tester/rcfiles/pauline_rc index f8cffd4b3..50920606b 100644 --- a/tester/rcfiles/pauline_rc +++ b/tester/rcfiles/pauline_rc @@ -47,4 +47,5 @@ device=StaticImage: Static picture echocancellation=0 #to not overload cpu in case of VG [net] -dns_srv_enabled=0 #no srv needed in general \ No newline at end of file +dns_srv_enabled=0 #no srv needed in general +stun_server=stun.linphone.org diff --git a/tester/rcfiles/pauline_tcp_rc b/tester/rcfiles/pauline_tcp_rc index 73fd469d7..1b2a85e80 100644 --- a/tester/rcfiles/pauline_tcp_rc +++ b/tester/rcfiles/pauline_tcp_rc @@ -45,3 +45,7 @@ device=StaticImage: Static picture [sound] echocancellation=0 #to not overload cpu in case of VG + +[net] +stun_server=stun.linphone.org + diff --git a/tester/register_tester.c b/tester/register_tester.c index ffd54f1a5..5f13243cc 100644 --- a/tester/register_tester.c +++ b/tester/register_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -64,7 +63,7 @@ void registration_state_changed(struct _LinphoneCore *lc, LinphoneProxyConfig *c case LinphoneRegistrationCleared:counters->number_of_LinphoneRegistrationCleared++;break; case LinphoneRegistrationFailed:counters->number_of_LinphoneRegistrationFailed++;break; default: - CU_FAIL("unexpected event");break; + BC_FAIL("unexpected event");break; } } @@ -84,7 +83,7 @@ static void register_with_refresh_base_3(LinphoneCore* lc const char* server_addr; LinphoneAuthInfo *info; - CU_ASSERT_PTR_NOT_NULL(lc); + BC_ASSERT_PTR_NOT_NULL(lc); if (!lc) return; counters = get_stats(lc); reset_counters(counters); @@ -116,7 +115,7 @@ static void register_with_refresh_base_3(LinphoneCore* lc linphone_core_iterate(lc); if (counters->number_of_auth_info_requested>0 && linphone_proxy_config_get_state(proxy_cfg) == LinphoneRegistrationFailed && late_auth_info) { if (!linphone_core_get_auth_info_list(lc)) { - CU_ASSERT_EQUAL(linphone_proxy_config_get_error(proxy_cfg),LinphoneReasonUnauthorized); + BC_ASSERT_EQUAL(linphone_proxy_config_get_error(proxy_cfg),LinphoneReasonUnauthorized, int, "%d"); info=linphone_auth_info_new(test_username,NULL,test_password,NULL,auth_domain,NULL); /*create authentication structure from identity*/ linphone_core_add_auth_info(lc,info); /*add authentication info to LinphoneCore*/ } @@ -126,15 +125,15 @@ static void register_with_refresh_base_3(LinphoneCore* lc break; /*no need to continue*/ ms_usleep(100000); } - CU_ASSERT_EQUAL(linphone_proxy_config_is_registered(proxy_cfg),(expected_final_state == LinphoneRegistrationOk)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationNone,0); - CU_ASSERT_TRUE(counters->number_of_LinphoneRegistrationProgress>=1); + BC_ASSERT_EQUAL(linphone_proxy_config_is_registered(proxy_cfg),(expected_final_state == LinphoneRegistrationOk), int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationNone,0, int, "%d"); + BC_ASSERT_TRUE(counters->number_of_LinphoneRegistrationProgress>=1); if (expected_final_state == LinphoneRegistrationOk) { - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,1+(refresh!=0)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,late_auth_info?1:0); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,1+(refresh!=0), int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,late_auth_info?1:0, int, "%d"); } else /*checking to be done outside this functions*/ - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0, int, "%d"); } @@ -155,7 +154,7 @@ static void register_with_refresh(LinphoneCoreManager* lcm, bool_t refresh,const stats* counters = &lcm->stat; register_with_refresh_base(lcm->lc,refresh,domain,route); linphone_core_manager_stop(lcm); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,1); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,1, int, "%d"); } static void register_with_refresh_with_send_error() { @@ -174,10 +173,10 @@ static void register_with_refresh_with_send_error() { linphone_core_iterate(lcm->lc); ms_usleep(100000); } - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,2); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,2, int, "%d"); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0, int, "%d"); linphone_core_manager_destroy(lcm); } @@ -186,7 +185,7 @@ static void simple_register(){ LinphoneCoreManager* lcm = create_lcm(); stats* counters = &lcm->stat; register_with_refresh(lcm,FALSE,NULL,NULL); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,0, int, "%d"); linphone_core_manager_destroy(lcm); } @@ -204,8 +203,8 @@ static void register_with_custom_headers(void){ linphone_core_set_network_reachable(marie->lc, TRUE); wait_for(marie->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk,initial_register_ok+1); value=linphone_proxy_config_get_custom_header(cfg, "Server"); - CU_ASSERT_PTR_NOT_NULL(value); - if (value) CU_ASSERT_TRUE(strstr(value, "Flexisip")!=NULL); + BC_ASSERT_PTR_NOT_NULL(value); + if (value) BC_ASSERT_TRUE(strstr(value, "Flexisip")!=NULL); linphone_core_manager_destroy(marie); } @@ -221,10 +220,10 @@ static void simple_unregister(){ reset_counters(counters); /*clear stats*/ /*nothing is supposed to arrive until done*/ - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); linphone_proxy_config_enable_register(proxy_config,FALSE); linphone_proxy_config_done(proxy_config); - CU_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1)); + BC_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1)); linphone_core_manager_destroy(lcm); } @@ -240,16 +239,16 @@ static void change_expires(){ reset_counters(counters); /*clear stats*/ /*nothing is supposed to arrive until done*/ - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); linphone_proxy_config_set_expires(proxy_config,3); linphone_proxy_config_done(proxy_config); - CU_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); /*wait 2s without receive refresh*/ - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,2,2000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,2,2000)); /* now, it should be ok*/ - CU_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,2)); + BC_ASSERT_TRUE(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,2)); linphone_core_manager_destroy(lcm); @@ -260,7 +259,7 @@ static void simple_register_with_refresh() { LinphoneCoreManager* lcm = create_lcm(); stats* counters = &lcm->stat; register_with_refresh(lcm,TRUE,NULL,NULL); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,0, int, "%d"); linphone_core_manager_destroy(lcm); } @@ -270,7 +269,7 @@ static void simple_auth_register_with_refresh() { char route[256]; sprintf(route,"sip:%s",test_route); register_with_refresh(lcm,TRUE,auth_domain,route); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,1); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,1, int, "%d"); linphone_core_manager_destroy(lcm); } @@ -313,7 +312,7 @@ static void simple_authenticated_register(){ linphone_core_add_auth_info(lcm->lc,info); /*add authentication info to LinphoneCore*/ counters = &lcm->stat; register_with_refresh(lcm,FALSE,auth_domain,route); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,0, int, "%d"); } static void ha1_authenticated_register(){ @@ -328,7 +327,7 @@ static void ha1_authenticated_register(){ linphone_core_add_auth_info(lcm->lc,info); /*add authentication info to LinphoneCore*/ counters = &lcm->stat; register_with_refresh(lcm,FALSE,auth_domain,route); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,0); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,0, int, "%d"); } static void authenticated_register_with_no_initial_credentials(){ @@ -347,7 +346,7 @@ static void authenticated_register_with_no_initial_credentials(){ counters= get_stats(mgr->lc); counters->number_of_auth_info_requested=0; register_with_refresh(mgr,FALSE,auth_domain,route); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,1); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,1, int, "%d"); linphone_core_manager_destroy(mgr); } @@ -364,7 +363,7 @@ static void authenticated_register_with_late_credentials(){ counters = get_stats(mgr->lc); register_with_refresh_base_2(mgr->lc,FALSE,auth_domain,route,TRUE,transport); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,1); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,1, int, "%d"); linphone_core_manager_destroy(mgr); } @@ -384,9 +383,9 @@ static void authenticated_register_with_wrong_late_credentials(){ counters = get_stats(mgr->lc); register_with_refresh_base_3(mgr->lc,FALSE,auth_domain,route,TRUE,transport,LinphoneRegistrationFailed); - CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,2); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,2); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,2); + BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,2, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,2, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,2, int, "%d"); test_password=saved_test_passwd; linphone_core_manager_destroy(mgr); @@ -407,23 +406,23 @@ static void authenticated_register_with_wrong_credentials_with_params_base(const linphone_core_add_auth_info(mgr->lc,info); /*add wrong authentication info to LinphoneCore*/ counters = get_stats(mgr->lc); register_with_refresh_base_3(mgr->lc,TRUE,auth_domain,route,FALSE,transport,LinphoneRegistrationFailed); - //CU_ASSERT_EQUAL(counters->number_of_auth_info_requested,3); register_with_refresh_base_3 does not alow to precisely check number of number_of_auth_info_requested + //BC_ASSERT_EQUAL(counters->number_of_auth_info_requested,3, int, "%d"); register_with_refresh_base_3 does not alow to precisely check number of number_of_auth_info_requested /*wait for retry*/ - CU_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_auth_info_requested,4)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,1); + BC_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_auth_info_requested,4)); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,1, int, "%d"); /*check the detailed error info */ if (!user_agent || strcmp(user_agent,"tester-no-403")!=0){ LinphoneProxyConfig *cfg=NULL; linphone_core_get_default_proxy(mgr->lc,&cfg); - CU_ASSERT_PTR_NOT_NULL(cfg); + BC_ASSERT_PTR_NOT_NULL(cfg); if (cfg){ const LinphoneErrorInfo *ei=linphone_proxy_config_get_error_info(cfg); const char *phrase=linphone_error_info_get_phrase(ei); - CU_ASSERT_PTR_NOT_NULL(phrase); - if (phrase) CU_ASSERT_TRUE(strcmp(phrase,"Forbidden")==0); - CU_ASSERT_EQUAL(linphone_error_info_get_protocol_code(ei),403); - CU_ASSERT_PTR_NULL(linphone_error_info_get_details(ei)); + BC_ASSERT_PTR_NOT_NULL(phrase); + if (phrase) BC_ASSERT_TRUE(strcmp(phrase,"Forbidden")==0); + BC_ASSERT_EQUAL(linphone_error_info_get_protocol_code(ei),403, int, "%d"); + BC_ASSERT_PTR_NULL(linphone_error_info_get_details(ei)); } } @@ -450,7 +449,7 @@ static void authenticated_register_with_wrong_credentials_2() { linphone_proxy_config_enable_register(proxy,FALSE); linphone_proxy_config_done(proxy); current_in_progress=counters->number_of_LinphoneRegistrationProgress; - CU_ASSERT_FALSE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationProgress,current_in_progress+1)); + BC_ASSERT_FALSE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationProgress,current_in_progress+1)); linphone_core_manager_destroy(mgr); } @@ -460,7 +459,8 @@ static void authenticated_register_with_wrong_credentials_without_403() { static LinphoneCoreManager* configure_lcm(void) { LinphoneCoreManager *mgr=linphone_core_manager_new( "multi_account_rc"); stats *counters=&mgr->stat; - CU_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationOk,ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)))); + BC_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationOk,ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)))); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0, int, "%d"); return mgr; } @@ -478,10 +478,10 @@ static void network_state_change(){ counters = get_stats(lc); register_ok=counters->number_of_LinphoneRegistrationOk; linphone_core_set_network_reachable(lc,FALSE); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_NetworkReachableFalse,1)); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationNone,register_ok)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_NetworkReachableFalse,1)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationNone,register_ok)); linphone_core_set_network_reachable(lc,TRUE); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_NetworkReachableTrue,1)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_NetworkReachableTrue,1)); wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,2*register_ok); linphone_core_manager_destroy(mgr); @@ -521,9 +521,9 @@ static void transport_change(){ /*keep only udp*/ linphone_core_set_sip_transports(lc,&sip_tr); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok+number_of_udp_proxy)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok+number_of_udp_proxy)); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationFailed,total_number_of_proxies-number_of_udp_proxy)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationFailed,total_number_of_proxies-number_of_udp_proxy)); linphone_core_manager_destroy(mgr); } @@ -543,7 +543,7 @@ static void proxy_transport_change(){ reset_counters(counters); /*clear stats*/ linphone_proxy_config_edit(proxy_config); - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); addr = linphone_address_new(linphone_proxy_config_get_addr(proxy_config)); if (LinphoneTransportTcp == linphone_address_get_transport(addr)) { @@ -555,9 +555,9 @@ static void proxy_transport_change(){ linphone_proxy_config_done(proxy_config); - CU_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); + BC_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); /*as we change p[roxy server destination, we should'nt be notified about the clear*/ - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0, int, "%d"); ms_free(addr_as_string); linphone_address_destroy(addr); linphone_core_manager_destroy(lcm); @@ -579,16 +579,16 @@ static void proxy_transport_change_with_wrong_port() { linphone_core_get_default_proxy(lcm->lc,&proxy_config); linphone_proxy_config_edit(proxy_config); - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); linphone_proxy_config_set_server_addr(proxy_config,route); linphone_proxy_config_done(proxy_config); - CU_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); + BC_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationOk,1)); /*as we change proxy server destination, we should'nt be notified about the clear*/ - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,1); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,1); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationCleared,0, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,1, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,1, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0, int, "%d"); linphone_core_manager_destroy(lcm); @@ -610,14 +610,14 @@ static void proxy_transport_change_with_wrong_port_givin_up() { linphone_core_get_default_proxy(lcm->lc,&proxy_config); linphone_proxy_config_edit(proxy_config); - CU_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); + BC_ASSERT_FALSE(wait_for_until(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1,3000)); linphone_proxy_config_enableregister(proxy_config,FALSE); linphone_proxy_config_done(proxy_config); - CU_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,0); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,1); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0); + BC_ASSERT(wait_for(lcm->lc,lcm->lc,&counters->number_of_LinphoneRegistrationCleared,1)); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationOk,0, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationProgress,1, int, "%d"); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0, int, "%d"); linphone_core_manager_destroy(lcm); @@ -638,8 +638,8 @@ static void io_recv_error(){ number_of_udp_proxy=get_number_of_udp_proxy(lc); sal_set_recv_error(lc->sal, 0); - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationProgress,2*(register_ok-number_of_udp_proxy) /*because 1 udp*/)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0) + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationProgress,2*(register_ok-number_of_udp_proxy) /*because 1 udp*/)); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); sal_set_recv_error(lc->sal, 1); /*reset*/ @@ -661,11 +661,11 @@ static void io_recv_error_retry_immediatly(){ number_of_udp_proxy=get_number_of_udp_proxy(lc); sal_set_recv_error(lc->sal, 0); - CU_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,(register_ok-number_of_udp_proxy)+register_ok /*because 1 udp*/)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0) + BC_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,(register_ok-number_of_udp_proxy)+register_ok /*because 1 udp*/)); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); sal_set_recv_error(lc->sal, 1); /*reset*/ - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy+register_ok)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy+register_ok)); linphone_core_manager_destroy(mgr); } @@ -682,7 +682,7 @@ static void io_recv_error_late_recovery(){ lc=mgr->lc; sal_set_refresher_retry_after(lc->sal,1000); counters=&mgr->stat; - CU_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationOk,ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)))); + BC_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&counters->number_of_LinphoneRegistrationOk,ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)))); counters = get_stats(lc); @@ -692,15 +692,15 @@ static void io_recv_error_late_recovery(){ sal_set_recv_error(lc->sal, 0); sal_set_send_error(lc->sal, -1); - CU_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,(register_ok-number_of_udp_proxy)+register_ok /*because 1 udp*/)); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0) + BC_ASSERT_TRUE(wait_for(lc,NULL,&counters->number_of_LinphoneRegistrationProgress,(register_ok-number_of_udp_proxy)+register_ok /*because 1 udp*/)); + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); - CU_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationFailed,(register_ok-number_of_udp_proxy),sal_get_refresher_retry_after(lc->sal)+3000)); + BC_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationFailed,(register_ok-number_of_udp_proxy),sal_get_refresher_retry_after(lc->sal)+3000)); sal_set_recv_error(lc->sal, 1); /*reset*/ sal_set_send_error(lc->sal, 0); - CU_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy +register_ok,sal_get_refresher_retry_after(lc->sal)+3000)); + BC_ASSERT_TRUE(wait_for_list(lcs=ms_list_append(NULL,lc),&counters->number_of_LinphoneRegistrationOk,register_ok-number_of_udp_proxy +register_ok,sal_get_refresher_retry_after(lc->sal)+3000)); linphone_core_manager_destroy(mgr); } @@ -710,15 +710,14 @@ static void io_recv_error_without_active_register(){ LinphoneCore* lc; int register_ok; stats* counters ; - int number_of_udp_proxy=0; MSList* proxys; + int dummy=0; mgr=configure_lcm(); lc=mgr->lc; counters = get_stats(lc); register_ok=counters->number_of_LinphoneRegistrationOk; - number_of_udp_proxy=get_number_of_udp_proxy(lc); for (proxys=ms_list_copy(linphone_core_get_proxy_config_list(lc));proxys!=NULL;proxys=proxys->next) { LinphoneProxyConfig* proxy_cfg=(LinphoneProxyConfig*)proxys->data; @@ -728,14 +727,15 @@ static void io_recv_error_without_active_register(){ } ms_list_free(proxys); /*wait for unregistrations*/ - CU_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationCleared,register_ok /*because 1 udp*/)); + BC_ASSERT_TRUE(wait_for(lc,lc,&counters->number_of_LinphoneRegistrationCleared,register_ok /*because 1 udp*/)); sal_set_recv_error(lc->sal, 0); /*nothing should happen because no active registration*/ - CU_ASSERT_FALSE(wait_for_until(lc,lc,&counters->number_of_LinphoneRegistrationProgress,2*(register_ok-number_of_udp_proxy) /*because 1 udp*/,3000)); + wait_for_until(lc,lc, &dummy, 1, 3000); + BC_ASSERT_TRUE(counters->number_of_LinphoneRegistrationProgress == ms_list_size(linphone_core_get_proxy_config_list(lc))); - CU_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0) + BC_ASSERT_EQUAL(counters->number_of_LinphoneRegistrationFailed,0,int,"%d"); sal_set_recv_error(lc->sal, 1); /*reset*/ @@ -753,15 +753,15 @@ static void tls_certificate_failure(){ snprintf(rootcapath,sizeof(rootcapath), "%s/certificates/cn/agent.pem", bc_tester_read_dir_prefix); /*bad root ca*/ linphone_core_set_root_ca(mgr->lc,rootcapath); linphone_core_set_network_reachable(lc,TRUE); - CU_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&mgr->stat.number_of_LinphoneRegistrationFailed,1)); + BC_ASSERT_TRUE(wait_for(mgr->lc,mgr->lc,&mgr->stat.number_of_LinphoneRegistrationFailed,1)); linphone_core_set_root_ca(mgr->lc,NULL); /*no root ca*/ linphone_core_refresh_registers(mgr->lc); - CU_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationFailed,2)); + BC_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationFailed,2)); snprintf(rootcapath,sizeof(rootcapath), "%s/certificates/cn/cafile.pem", bc_tester_read_dir_prefix); /*goot root ca*/ linphone_core_set_root_ca(mgr->lc,rootcapath); linphone_core_refresh_registers(mgr->lc); - CU_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,1)); - CU_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,2); + BC_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,2, int, "%d"); linphone_core_destroy(mgr->lc); } @@ -784,7 +784,7 @@ static void tls_with_non_tls_server(){ linphone_proxy_config_set_server_addr(proxy_cfg,tmp); linphone_proxy_config_done(proxy_cfg); linphone_address_destroy(addr); - CU_ASSERT_TRUE(wait_for_until(lc,lc,&mgr->stat.number_of_LinphoneRegistrationFailed,1,5000)); + BC_ASSERT_TRUE(wait_for_until(lc,lc,&mgr->stat.number_of_LinphoneRegistrationFailed,1,5000)); linphone_core_manager_destroy(mgr); } @@ -798,8 +798,8 @@ static void tls_alt_name_register(){ snprintf(rootcapath,sizeof(rootcapath), "%s/certificates/cn/cafile.pem", bc_tester_read_dir_prefix); linphone_core_set_root_ca(mgr->lc,rootcapath); linphone_core_refresh_registers(mgr->lc); - CU_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,1)); - CU_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,0); + BC_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,0, int, "%d"); linphone_core_manager_destroy(mgr); } @@ -813,8 +813,8 @@ static void tls_wildcard_register(){ snprintf(rootcapath,sizeof(rootcapath), "%s/certificates/cn/cafile.pem", bc_tester_read_dir_prefix); linphone_core_set_root_ca(mgr->lc,rootcapath); linphone_core_refresh_registers(mgr->lc); - CU_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,2)); - CU_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,0); + BC_ASSERT_TRUE(wait_for(lc,lc,&mgr->stat.number_of_LinphoneRegistrationOk,2)); + BC_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationFailed,0, int, "%d"); linphone_core_destroy(mgr->lc); } diff --git a/tester/remote_provisioning_tester.c b/tester/remote_provisioning_tester.c index 12c194a67..ad3c5ebb1 100644 --- a/tester/remote_provisioning_tester.c +++ b/tester/remote_provisioning_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -38,64 +37,64 @@ void linphone_configuration_status(LinphoneCore *lc, LinphoneConfiguringState st static void remote_provisioning_skipped(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSkipped,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSkipped,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_http(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_transient(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_transient_remote_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); - CU_ASSERT_TRUE(linphone_core_is_provisioning_transient(marie->lc) == TRUE); - CU_ASSERT_TRUE(linphone_core_get_provisioning_uri(marie->lc) == NULL); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE(linphone_core_is_provisioning_transient(marie->lc) == TRUE); + BC_ASSERT_TRUE(linphone_core_get_provisioning_uri(marie->lc) == NULL); linphone_core_manager_destroy(marie); } static void remote_provisioning_https(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_https_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneRegistrationOk,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_not_found(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_404_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_invalid(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_invalid_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_invalid_uri(void) { LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_invalid_uri_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringFailed,1)); linphone_core_manager_destroy(marie); } static void remote_provisioning_default_values(void) { LinphoneProxyConfig *lpc; LinphoneCoreManager* marie = linphone_core_manager_new2("marie_remote_default_values_rc", FALSE); - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); lpc = linphone_core_create_proxy_config(marie->lc); - CU_ASSERT_TRUE(lpc->reg_sendregister == TRUE); - CU_ASSERT_TRUE(lpc->expires == 604800); - CU_ASSERT_STRING_EQUAL(lpc->reg_proxy, ""); - CU_ASSERT_STRING_EQUAL(lpc->reg_route, ""); - CU_ASSERT_STRING_EQUAL(lpc->reg_identity, "sip:?@sip.linphone.org"); + BC_ASSERT_TRUE(lpc->reg_sendregister == TRUE); + BC_ASSERT_TRUE(lpc->expires == 604800); + BC_ASSERT_STRING_EQUAL(lpc->reg_proxy, ""); + BC_ASSERT_STRING_EQUAL(lpc->reg_route, ""); + BC_ASSERT_STRING_EQUAL(lpc->reg_identity, "sip:?@sip.linphone.org"); { LpConfig* lp = linphone_core_get_config(marie->lc); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(lp,"app","toto","empty"),"titi"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(lp,"app","toto","empty"),"titi"); } linphone_core_manager_destroy(marie); @@ -112,10 +111,10 @@ static void remote_provisioning_file(void) { #else marie = linphone_core_manager_new2("marie_remote_localfile_rc", FALSE); #endif - CU_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); + BC_ASSERT_TRUE(wait_for(marie->lc,NULL,&marie->stat.number_of_LinphoneConfiguringSuccessful,1)); conf = linphone_core_get_config( marie->lc ); - CU_ASSERT_EQUAL( lp_config_get_int(conf,"misc","tester_file_ok", 0), 1 ); + BC_ASSERT_EQUAL( lp_config_get_int(conf,"misc","tester_file_ok", 0), 1 , int, "%d"); linphone_core_manager_destroy(marie); } diff --git a/tester/setup_tester.c b/tester/setup_tester.c index 03cb36a8b..cb1bcb883 100644 --- a/tester/setup_tester.c +++ b/tester/setup_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "liblinphone_tester.h" #include "lpconfig.h" @@ -26,7 +25,7 @@ static void linphone_version_test(void){ const char *version=linphone_core_get_version(); /*make sure the git version is always included in the version number*/ - CU_ASSERT_TRUE(strstr(version,"unknown")==NULL); + BC_ASSERT_TRUE(strstr(version,"unknown")==NULL); } static void core_init_test(void) { @@ -36,7 +35,7 @@ static void core_init_test(void) { lc = linphone_core_new(&v_table,NULL,NULL,NULL); /* until we have good certificates on our test server... */ linphone_core_verify_server_certificates(lc,FALSE); - CU_ASSERT_PTR_NOT_NULL_FATAL(lc); + BC_ASSERT_PTR_NOT_NULL_FATAL(lc); linphone_core_destroy(lc); } @@ -50,10 +49,10 @@ static void core_sip_transport_test(void) { LCSipTransports tr; memset (&v_table,0,sizeof(v_table)); lc = linphone_core_new(&v_table,NULL,NULL,NULL); - CU_ASSERT_PTR_NOT_NULL_FATAL(lc); + BC_ASSERT_PTR_NOT_NULL_FATAL(lc); linphone_core_get_sip_transports(lc,&tr); - CU_ASSERT_EQUAL(tr.udp_port,5060); /*default config*/ - CU_ASSERT_EQUAL(tr.tcp_port,5060); /*default config*/ + BC_ASSERT_EQUAL(tr.udp_port,5060, int, "%d"); /*default config*/ + BC_ASSERT_EQUAL(tr.tcp_port,5060, int, "%d"); /*default config*/ tr.udp_port=LC_SIP_TRANSPORT_RANDOM; tr.tcp_port=LC_SIP_TRANSPORT_RANDOM; @@ -62,12 +61,12 @@ static void core_sip_transport_test(void) { linphone_core_set_sip_transports(lc,&tr); linphone_core_get_sip_transports(lc,&tr); - CU_ASSERT_NOT_EQUAL(tr.udp_port,5060); /*default config*/ - CU_ASSERT_NOT_EQUAL(tr.tcp_port,5060); /*default config*/ + BC_ASSERT_NOT_EQUAL(tr.udp_port,5060,int,"%d"); /*default config*/ + BC_ASSERT_NOT_EQUAL(tr.tcp_port,5060,int,"%d"); /*default config*/ - CU_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_port",-2),LC_SIP_TRANSPORT_RANDOM); - CU_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_tcp_port",-2),LC_SIP_TRANSPORT_RANDOM); - CU_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_tls_port",-2),LC_SIP_TRANSPORT_RANDOM); + BC_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_port",-2),LC_SIP_TRANSPORT_RANDOM, int, "%d"); + BC_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_tcp_port",-2),LC_SIP_TRANSPORT_RANDOM, int, "%d"); + BC_ASSERT_EQUAL(lp_config_get_int(linphone_core_get_config(lc),"sip","sip_tls_port",-2),LC_SIP_TRANSPORT_RANDOM, int, "%d"); linphone_core_destroy(lc); } @@ -81,14 +80,14 @@ static void linphone_interpret_url_test() memset ( &v_table,0,sizeof ( v_table ) ); lc = linphone_core_new ( &v_table,NULL,NULL,NULL ); - CU_ASSERT_PTR_NOT_NULL_FATAL ( lc ); + BC_ASSERT_PTR_NOT_NULL_FATAL ( lc ); address = linphone_core_interpret_url(lc, sips_address); - CU_ASSERT_PTR_NOT_NULL_FATAL(address); - CU_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_scheme(address), "sips"); - CU_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_username(address), "margaux"); - CU_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_domain(address), "sip.linphone.org"); + BC_ASSERT_PTR_NOT_NULL_FATAL(address); + BC_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_scheme(address), "sips"); + BC_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_username(address), "margaux"); + BC_ASSERT_STRING_EQUAL_FATAL(linphone_address_get_domain(address), "sip.linphone.org"); linphone_address_destroy(address); @@ -101,11 +100,11 @@ static void linphone_lpconfig_from_buffer(){ LpConfig* conf; conf = lp_config_new_from_buffer(buffer); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"buffer","test",""),"ok"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"buffer","test",""),"ok"); lp_config_destroy(conf); conf = lp_config_new_from_buffer(buffer_linebreaks); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"buffer_linebreaks","test",""),"ok"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"buffer_linebreaks","test",""),"ok"); lp_config_destroy(conf); } @@ -116,11 +115,11 @@ static void linphone_lpconfig_from_buffer_zerolen_value(){ conf = lp_config_new_from_buffer(zerolen); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); lp_config_set_string(conf, "test", "non_zero_len", ""); /* should remove "non_zero_len" */ - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); lp_config_destroy(conf); } @@ -135,13 +134,13 @@ static void linphone_lpconfig_from_file_zerolen_value(){ stores the app bundle in read-only */ conf = lp_config_new_with_factory(NULL, rc_path); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); // non_zero_len=test -> should return test - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); lp_config_set_string(conf, "test", "non_zero_len", ""); /* should remove "non_zero_len" */ - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); ms_free(rc_path); lp_config_destroy(conf); @@ -154,15 +153,15 @@ static void linphone_lpconfig_from_xml_zerolen_value(){ LinphoneCoreManager* mgr = linphone_core_manager_new2("empty_rc",FALSE); - CU_ASSERT_EQUAL(linphone_remote_provisioning_load_file(mgr->lc, xml_path), 0); + BC_ASSERT_EQUAL(linphone_remote_provisioning_load_file(mgr->lc, xml_path), 0, int, "%d"); conf = mgr->lc->config; - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","zero_len","LOL"),"LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len",""),"test"); lp_config_set_string(conf, "test", "non_zero_len", ""); /* should remove "non_zero_len" */ - CU_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); + BC_ASSERT_STRING_EQUAL(lp_config_get_string(conf,"test","non_zero_len","LOL"), "LOL"); linphone_core_manager_destroy(mgr); ms_free(xml_path); @@ -176,15 +175,15 @@ void linphone_proxy_config_address_equal_test() { LinphoneAddress *e = linphone_address_new("sip:toto@titi;transport=udp"); LinphoneAddress *f = linphone_address_new("sip:toto@titi?X-Create-Account=yes"); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,NULL), LinphoneProxyConfigAddressDifferent); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,b), LinphoneProxyConfigAddressDifferent); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,c), LinphoneProxyConfigAddressDifferent); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,d), LinphoneProxyConfigAddressDifferent); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,e), LinphoneProxyConfigAddressWeakEqual); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(NULL,NULL), LinphoneProxyConfigAddressEqual); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,f), LinphoneProxyConfigAddressWeakEqual); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(c,f), LinphoneProxyConfigAddressDifferent); - CU_ASSERT_EQUAL(linphone_proxy_config_address_equal(e,f), LinphoneProxyConfigAddressWeakEqual); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,NULL), LinphoneProxyConfigAddressDifferent, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,b), LinphoneProxyConfigAddressDifferent, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,c), LinphoneProxyConfigAddressDifferent, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,d), LinphoneProxyConfigAddressDifferent, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,e), LinphoneProxyConfigAddressWeakEqual, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(NULL,NULL), LinphoneProxyConfigAddressEqual, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(a,f), LinphoneProxyConfigAddressWeakEqual, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(c,f), LinphoneProxyConfigAddressDifferent, int, "%d"); + BC_ASSERT_EQUAL(linphone_proxy_config_address_equal(e,f), LinphoneProxyConfigAddressWeakEqual, int, "%d"); linphone_address_destroy(a); linphone_address_destroy(b); @@ -200,36 +199,36 @@ void linphone_proxy_config_is_server_config_changed_test() { linphone_proxy_config_set_identity(proxy_config,"sip:toto@titi"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_identity(proxy_config,"sips:toto@titi"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent, int, "%d"); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_server_addr(proxy_config,"sip:toto.com"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent, int, "%d"); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org:4444"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent, int, "%d"); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org;transport=tcp"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressDifferent, int, "%d"); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_server_addr(proxy_config,"sip:sip.linphone.org;param=blue"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressWeakEqual); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressWeakEqual, int, "%d"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_set_contact_parameters(proxy_config,"blabla=blue"); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressEqual); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressEqual, int, "%d"); linphone_proxy_config_edit(proxy_config); linphone_proxy_config_enable_register(proxy_config,TRUE); - CU_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressEqual); + BC_ASSERT_EQUAL(linphone_proxy_config_is_server_config_changed(proxy_config), LinphoneProxyConfigAddressEqual, int, "%d"); linphone_proxy_config_destroy(proxy_config); } @@ -239,11 +238,33 @@ static void chat_root_test(void) { LinphoneCore* lc; memset (&v_table,0,sizeof(v_table)); lc = linphone_core_new(&v_table,NULL,NULL,NULL); - CU_ASSERT_PTR_NOT_NULL_FATAL(lc); + BC_ASSERT_PTR_NOT_NULL_FATAL(lc); linphone_core_create_chat_room(lc,"sip:toto@titi.com"); linphone_core_destroy(lc); } +static void devices_reload_test(void) { + char *devid1; + char *devid2; + LinphoneCoreManager *mgr = linphone_core_manager_new2("empty_rc", FALSE); + + devid1 = ms_strdup(linphone_core_get_capture_device(mgr->lc)); + linphone_core_reload_sound_devices(mgr->lc); + devid2 = ms_strdup(linphone_core_get_capture_device(mgr->lc)); + BC_ASSERT_STRING_EQUAL(devid1, devid2); + ms_free(devid1); + ms_free(devid2); + + devid1 = ms_strdup(linphone_core_get_video_device(mgr->lc)); + linphone_core_reload_video_devices(mgr->lc); + devid2 = ms_strdup(linphone_core_get_video_device(mgr->lc)); + BC_ASSERT_STRING_EQUAL(devid1, devid2); + ms_free(devid1); + ms_free(devid2); + + linphone_core_manager_destroy(mgr); +} + test_t setup_tests[] = { { "Version check", linphone_version_test }, { "Linphone Address", linphone_address_test }, @@ -256,7 +277,8 @@ test_t setup_tests[] = { { "LPConfig zero_len value from buffer", linphone_lpconfig_from_buffer_zerolen_value }, { "LPConfig zero_len value from file", linphone_lpconfig_from_file_zerolen_value }, { "LPConfig zero_len value from XML", linphone_lpconfig_from_xml_zerolen_value }, - { "Chat room", chat_root_test } + { "Chat room", chat_root_test }, + { "Devices reload", devices_reload_test } }; test_suite_t setup_test_suite = { diff --git a/tester/sounds/vrroom.wav b/tester/sounds/vrroom.wav new file mode 100644 index 000000000..673a3addc Binary files /dev/null and b/tester/sounds/vrroom.wav differ diff --git a/tester/stun_tester.c b/tester/stun_tester.c index 58a069f3d..03aa1ac13 100644 --- a/tester/stun_tester.c +++ b/tester/stun_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -57,10 +56,10 @@ static void linphone_stun_test_encode() size_t bigLen = STUN_MAX_MESSAGE_SIZE; size_t len = test_stun_encode(smallBuff, smallLen, TRUE); - CU_ASSERT(len == -1); + BC_ASSERT(len == -1); len = test_stun_encode(bigBuff, bigLen, TRUE); - CU_ASSERT(len > 0); + BC_ASSERT(len > 0); ms_message("STUN message encoded in %i bytes", (int)len); } @@ -77,20 +76,20 @@ static void linphone_stun_test_grab_ip() dummy_call.media_ports[1].rtp_port = 9078; linphone_core_set_stun_server(lc_stun->lc, stun_address); - CU_ASSERT_STRING_EQUAL(stun_address, linphone_core_get_stun_server(lc_stun->lc)); + BC_ASSERT_STRING_EQUAL(stun_address, linphone_core_get_stun_server(lc_stun->lc)); wait_for(lc_stun->lc,lc_stun->lc,&tmp,1); ping_time = linphone_core_run_stun_tests(lc_stun->lc, &dummy_call); - CU_ASSERT(ping_time != -1); + BC_ASSERT(ping_time != -1); ms_message("Round trip to STUN: %d ms", ping_time); - CU_ASSERT( dummy_call.ac.addr[0] != '\0'); - CU_ASSERT( dummy_call.ac.port != 0); + BC_ASSERT( dummy_call.ac.addr[0] != '\0'); + BC_ASSERT( dummy_call.ac.port != 0); #ifdef VIDEO_ENABLED - CU_ASSERT( dummy_call.vc.addr[0] != '\0'); - CU_ASSERT( dummy_call.vc.port != 0); + BC_ASSERT( dummy_call.vc.addr[0] != '\0'); + BC_ASSERT( dummy_call.vc.port != 0); #endif ms_message("STUN test result: local audio port maps to %s:%i", diff --git a/tester/tester.c b/tester/tester.c index fe3054c0b..e63629bc3 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -29,9 +29,9 @@ #include #endif - static bool_t liblinphone_tester_ipv6_enabled=FALSE; - static int liblinphone_tester_keep_accounts_flag = 0; - static int manager_count = 0; +static bool_t liblinphone_tester_ipv6_enabled=FALSE; +static int liblinphone_tester_keep_accounts_flag = 0; +static int manager_count = 0; const char* test_domain="sipopen.example.org"; const char* auth_domain="sip.example.org"; @@ -67,15 +67,15 @@ void liblinphone_tester_enable_ipv6(bool_t enabled){ LinphoneAddress * create_linphone_address(const char * domain) { LinphoneAddress *addr = linphone_address_new(NULL); - CU_ASSERT_PTR_NOT_NULL_FATAL(addr); + BC_ASSERT_PTR_NOT_NULL_FATAL(addr); linphone_address_set_username(addr,test_username); - CU_ASSERT_STRING_EQUAL(test_username,linphone_address_get_username(addr)); + BC_ASSERT_STRING_EQUAL(test_username,linphone_address_get_username(addr)); if (!domain) domain= test_route; linphone_address_set_domain(addr,domain); - CU_ASSERT_STRING_EQUAL(domain,linphone_address_get_domain(addr)); + BC_ASSERT_STRING_EQUAL(domain,linphone_address_get_domain(addr)); linphone_address_set_display_name(addr, NULL); linphone_address_set_display_name(addr, "Mr Tester"); - CU_ASSERT_STRING_EQUAL("Mr Tester",linphone_address_get_display_name(addr)); + BC_ASSERT_STRING_EQUAL("Mr Tester",linphone_address_get_display_name(addr)); return addr; } @@ -107,7 +107,7 @@ LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, c if (file){ filepath = ms_strdup_printf("%s/%s", path, file); - CU_ASSERT_TRUE_FATAL(ortp_file_exist(filepath)==0); + BC_ASSERT_TRUE_FATAL(ortp_file_exist(filepath)==0); config = lp_config_new_with_factory(NULL,filepath); } @@ -297,7 +297,7 @@ void linphone_core_manager_start(LinphoneCoreManager *mgr, const char* rc_file, LinphoneProxyConfig* proxy; int proxy_count; - /*CU_ASSERT_EQUAL(ms_list_size(linphone_core_get_proxy_config_list(lc)),proxy_count);*/ + /*BC_ASSERT_EQUAL(ms_list_size(linphone_core_get_proxy_config_list(lc)),proxy_count, int, "%d");*/ if (check_for_proxies && rc_file) /**/ proxy_count=ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)); else @@ -311,7 +311,7 @@ void linphone_core_manager_start(LinphoneCoreManager *mgr, const char* rc_file, ms_error("Did not register after %d seconds for %d proxies", REGISTER_TIMEOUT, proxy_count); } } - CU_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationOk,proxy_count); + BC_ASSERT_EQUAL(mgr->stat.number_of_LinphoneRegistrationOk,proxy_count, int, "%d"); enable_codec(mgr->lc,"PCMU",8000); linphone_core_get_default_proxy(mgr->lc,&proxy); diff --git a/tester/transport_tester.c b/tester/transport_tester.c index e847e0fe8..aae69c3a0 100644 --- a/tester/transport_tester.c +++ b/tester/transport_tester.c @@ -16,11 +16,8 @@ along with this program. If not, see . */ - -#include #include #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -52,7 +49,7 @@ static char* get_public_contact_ip(LinphoneCore* lc) { long contact_host_ip_len; char contact_host_ip[255]; char * contact = linphone_proxy_config_get_contact(linphone_core_get_default_proxy_config(lc)); - CU_ASSERT_PTR_NOT_NULL(contact); + BC_ASSERT_PTR_NOT_NULL(contact); contact_host_ip_len = strchr(contact, ':')-contact; strncpy(contact_host_ip, contact, contact_host_ip_len); contact_host_ip[contact_host_ip_len]='\0'; @@ -61,23 +58,43 @@ static char* get_public_contact_ip(LinphoneCore* lc) { } -static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with_sip, LinphoneMediaEncryption encryption) { +static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with_sip, LinphoneMediaEncryption encryption, bool_t with_video_and_ice) { if (linphone_core_tunnel_available()){ LinphoneCoreManager *pauline = linphone_core_manager_new( "pauline_rc"); LinphoneCoreManager *marie = linphone_core_manager_new( "marie_rc"); - LinphoneCall *pauline_call; + LinphoneCall *pauline_call, *marie_call; LinphoneProxyConfig *proxy = linphone_core_get_default_proxy_config(pauline->lc); LinphoneAddress *server_addr = linphone_address_new(linphone_proxy_config_get_server_addr(proxy)); LinphoneAddress *route = linphone_address_new(linphone_proxy_config_get_route(proxy)); const char * tunnel_ip = get_ip_from_hostname("tunnel.linphone.org"); char *public_ip, *public_ip2=NULL; - CU_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,1)); + BC_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,1)); public_ip = get_public_contact_ip(pauline->lc); - CU_ASSERT_STRING_NOT_EQUAL(public_ip, tunnel_ip); + BC_ASSERT_STRING_NOT_EQUAL(public_ip, tunnel_ip); linphone_core_set_media_encryption(pauline->lc, encryption); + if (with_video_and_ice){ + /*we want to test that tunnel is able to work with long SIP message, above mtu. + * Enable ICE and many codec to make the SIP message bigger*/ + linphone_core_set_firewall_policy(marie->lc, LinphonePolicyUseIce); + linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce); + linphone_core_enable_payload_type(pauline->lc, + linphone_core_find_payload_type(pauline->lc, "speex", 32000, 1), TRUE); + linphone_core_enable_payload_type(pauline->lc, + linphone_core_find_payload_type(pauline->lc, "speex", 16000, 1), TRUE); + linphone_core_enable_payload_type(pauline->lc, + linphone_core_find_payload_type(pauline->lc, "G722", 8000, 1), TRUE); + linphone_core_enable_payload_type(marie->lc, + linphone_core_find_payload_type(marie->lc, "speex", 32000, 1), TRUE); + linphone_core_enable_payload_type(marie->lc, + linphone_core_find_payload_type(marie->lc, "speex", 16000, 1), TRUE); + linphone_core_enable_payload_type(marie->lc, + linphone_core_find_payload_type(marie->lc, "G722", 8000, 1), TRUE); + + } + if (tunnel_mode != LinphoneTunnelModeDisable){ LinphoneTunnel *tunnel = linphone_core_get_tunnel(pauline->lc); LinphoneTunnelConfig *config = linphone_tunnel_config_new(); @@ -91,14 +108,14 @@ static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with /* * Enabling the tunnel with sip cause another REGISTER to be made. - * In automatic mode, the udp test should conclude (assuming we have a normal network), that no + * In automatic mode, the udp test should conclude (assuming we have a normal network), that no * tunnel is needed. Thus the number of registrations should stay to 1. - * The library is missing a notification of "tunnel connectivity test finished" to enable the + * The library is missing a notification of "tunnel connectivity test finished" to enable the * full testing of the automatic mode. */ - if(tunnel_mode == LinphoneTunnelModeEnable && with_sip) { - CU_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,2)); + if (tunnel_mode == LinphoneTunnelModeEnable && with_sip) { + BC_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,2)); /* Ensure that we did use the tunnel. If so, we should see contact changed from: Contact: ;.[...] To: @@ -106,20 +123,42 @@ static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with */ ms_free(public_ip); public_ip = get_public_contact_ip(pauline->lc); - CU_ASSERT_STRING_EQUAL(public_ip, tunnel_ip); + BC_ASSERT_STRING_EQUAL(public_ip, tunnel_ip); } else { public_ip2 = get_public_contact_ip(pauline->lc); - CU_ASSERT_STRING_EQUAL(public_ip, public_ip2); + BC_ASSERT_STRING_EQUAL(public_ip, public_ip2); } } - CU_ASSERT_TRUE(call(pauline,marie)); + BC_ASSERT_TRUE(call(pauline,marie)); pauline_call=linphone_core_get_current_call(pauline->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); if (pauline_call!=NULL){ - CU_ASSERT_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(pauline_call)), + BC_ASSERT_PTR_EQUAL(linphone_call_params_get_media_encryption(linphone_call_get_current_params(pauline_call)), encryption); } + if (tunnel_mode == LinphoneTunnelModeEnable && with_sip){ + /* make sure the call from pauline arrived from the tunnel by checking the contact address*/ + marie_call = linphone_core_get_current_call(marie->lc); + BC_ASSERT_PTR_NOT_NULL(marie_call); + if (marie_call){ + const char *remote_contact = linphone_call_get_remote_contact(marie_call); + BC_ASSERT_PTR_NOT_NULL(remote_contact); + if (remote_contact){ + LinphoneAddress *tmp = linphone_address_new(remote_contact); + BC_ASSERT_PTR_NOT_NULL(tmp); + if (tmp){ + BC_ASSERT_STRING_EQUAL(linphone_address_get_domain(tmp), tunnel_ip); + linphone_address_destroy(tmp); + } + } + } + } +#ifdef VIDEO_ENABLED + if (with_video_and_ice){ + BC_ASSERT_TRUE(add_video(pauline, marie, TRUE)); + } +#endif end_call(pauline,marie); ms_free(public_ip); @@ -135,26 +174,34 @@ static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with static void call_with_tunnel(void) { - call_with_transport_base(LinphoneTunnelModeEnable, TRUE, LinphoneMediaEncryptionNone); + call_with_transport_base(LinphoneTunnelModeEnable, TRUE, LinphoneMediaEncryptionNone, FALSE); } static void call_with_tunnel_srtp(void) { - call_with_transport_base(LinphoneTunnelModeEnable, TRUE, LinphoneMediaEncryptionSRTP); + call_with_transport_base(LinphoneTunnelModeEnable, TRUE, LinphoneMediaEncryptionSRTP, FALSE); } static void call_with_tunnel_without_sip(void) { - call_with_transport_base(LinphoneTunnelModeEnable, FALSE, LinphoneMediaEncryptionNone); + call_with_transport_base(LinphoneTunnelModeEnable, FALSE, LinphoneMediaEncryptionNone, FALSE); } static void call_with_tunnel_auto(void) { - call_with_transport_base(LinphoneTunnelModeAuto, TRUE, LinphoneMediaEncryptionNone); + call_with_transport_base(LinphoneTunnelModeAuto, TRUE, LinphoneMediaEncryptionNone, FALSE); } static void call_with_tunnel_auto_without_sip_with_srtp(void) { - call_with_transport_base(LinphoneTunnelModeAuto, FALSE, LinphoneMediaEncryptionSRTP); + call_with_transport_base(LinphoneTunnelModeAuto, FALSE, LinphoneMediaEncryptionSRTP, FALSE); } #ifdef VIDEO_ENABLED + +static void full_tunnel_video_ice_call(void){ + if (linphone_core_tunnel_available()){ + call_with_transport_base(LinphoneTunnelModeEnable, TRUE, LinphoneMediaEncryptionNone, TRUE); + }else + ms_warning("Could not test %s because tunnel functionality is not available",__FUNCTION__); +} + static void tunnel_srtp_video_ice_call(void) { if (linphone_core_tunnel_available()) call_base(LinphoneMediaEncryptionSRTP,TRUE,FALSE,LinphonePolicyUseIce,TRUE); @@ -214,6 +261,7 @@ test_t transport_tests[] = { { "Tunnel ZRTP ice call", tunnel_zrtp_ice_call }, #ifdef VIDEO_ENABLED { "Tunnel ice video call", tunnel_video_ice_call }, + { "Tunnel with SIP - ice video call", full_tunnel_video_ice_call }, { "Tunnel SRTP ice video call", tunnel_srtp_video_ice_call }, { "Tunnel DTLS ice video call", tunnel_dtls_video_ice_call }, { "Tunnel ZRTP ice video call", tunnel_zrtp_video_ice_call }, diff --git a/tester/upnp_tester.c b/tester/upnp_tester.c index 656c9c3eb..3f39b0c9c 100644 --- a/tester/upnp_tester.c +++ b/tester/upnp_tester.c @@ -16,8 +16,7 @@ along with this program. If not, see . */ -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "lpconfig.h" #include "private.h" @@ -28,7 +27,7 @@ static void upnp_start_n_stop(void) { LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); #ifdef BUILD_UPNP - CU_ASSERT_TRUE(lc_upnp->lc->upnp != NULL); + BC_ASSERT_TRUE(lc_upnp->lc->upnp != NULL); #endif linphone_core_manager_destroy(lc_upnp); } @@ -37,7 +36,7 @@ static void upnp_check_state(void) { int tmp = 0; LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); - CU_ASSERT_TRUE(linphone_core_get_upnp_state(lc_upnp->lc) == LinphoneUpnpStateOk); + BC_ASSERT_TRUE(linphone_core_get_upnp_state(lc_upnp->lc) == LinphoneUpnpStateOk); linphone_core_manager_destroy(lc_upnp); } @@ -47,7 +46,7 @@ static void upnp_check_ipaddress(void) { LinphoneCoreManager* lc_upnp = linphone_core_manager_new2( "upnp_rc", FALSE); wait_for(lc_upnp->lc,lc_upnp->lc,&tmp,1); addr = linphone_core_get_upnp_external_ipaddress(lc_upnp->lc); - CU_ASSERT_TRUE(addr != NULL && strlen(addr)>=7); + BC_ASSERT_TRUE(addr != NULL && strlen(addr)>=7); linphone_core_manager_destroy(lc_upnp); } diff --git a/tester/video_tester.c b/tester/video_tester.c index e61450f02..163d2f3f0 100644 --- a/tester/video_tester.c +++ b/tester/video_tester.c @@ -19,8 +19,7 @@ #if defined(VIDEO_ENABLED) && defined(HAVE_GTK) -#include -#include "CUnit/Basic.h" + #include "linphonecore.h" #include "liblinphone_tester.h" #include "lpconfig.h" @@ -168,11 +167,11 @@ static bool_t video_call_with_params(LinphoneCoreManager* caller_mgr, LinphoneCo bool_t result = TRUE; bool_t did_received_call; - CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(caller_mgr->lc, callee_mgr->identity, caller_params)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(caller_mgr->lc, callee_mgr->identity, caller_params)); did_received_call = wait_for(callee_mgr->lc, caller_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallIncomingReceived, initial_callee.number_of_LinphoneCallIncomingReceived + 1); if (!did_received_call) return 0; - CU_ASSERT_EQUAL(caller_mgr->stat.number_of_LinphoneCallOutgoingProgress, initial_caller.number_of_LinphoneCallOutgoingProgress + 1); + BC_ASSERT_EQUAL(caller_mgr->stat.number_of_LinphoneCallOutgoingProgress, initial_caller.number_of_LinphoneCallOutgoingProgress + 1, int, "%d"); while (caller_mgr->stat.number_of_LinphoneCallOutgoingRinging != (initial_caller.number_of_LinphoneCallOutgoingRinging + 1) && caller_mgr->stat.number_of_LinphoneCallOutgoingEarlyMedia != (initial_caller.number_of_LinphoneCallOutgoingEarlyMedia + 1) @@ -182,10 +181,10 @@ static bool_t video_call_with_params(LinphoneCoreManager* caller_mgr, LinphoneCo ms_usleep(100000); } - CU_ASSERT_TRUE((caller_mgr->stat.number_of_LinphoneCallOutgoingRinging == initial_caller.number_of_LinphoneCallOutgoingRinging + 1) + BC_ASSERT_TRUE((caller_mgr->stat.number_of_LinphoneCallOutgoingRinging == initial_caller.number_of_LinphoneCallOutgoingRinging + 1) || (caller_mgr->stat.number_of_LinphoneCallOutgoingEarlyMedia == initial_caller.number_of_LinphoneCallOutgoingEarlyMedia + 1)); - CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(callee_mgr->lc)); + BC_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(callee_mgr->lc)); if(!linphone_core_get_current_call(caller_mgr->lc) || !linphone_core_get_current_call(callee_mgr->lc) || !linphone_core_get_current_call_remote_address(callee_mgr->lc)) { return 0; } @@ -193,8 +192,8 @@ static bool_t video_call_with_params(LinphoneCoreManager* caller_mgr, LinphoneCo if (automatically_accept == TRUE) { linphone_core_accept_call_with_params(callee_mgr->lc, linphone_core_get_current_call(callee_mgr->lc), callee_params); - CU_ASSERT_TRUE(wait_for(callee_mgr->lc, caller_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallConnected, initial_callee.number_of_LinphoneCallConnected + 1)); - CU_ASSERT_TRUE(wait_for(callee_mgr->lc, caller_mgr->lc, &caller_mgr->stat.number_of_LinphoneCallConnected, initial_callee.number_of_LinphoneCallConnected + 1)); + BC_ASSERT_TRUE(wait_for(callee_mgr->lc, caller_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallConnected, initial_callee.number_of_LinphoneCallConnected + 1)); + BC_ASSERT_TRUE(wait_for(callee_mgr->lc, caller_mgr->lc, &caller_mgr->stat.number_of_LinphoneCallConnected, initial_callee.number_of_LinphoneCallConnected + 1)); result = wait_for(callee_mgr->lc, caller_mgr->lc, &caller_mgr->stat.number_of_LinphoneCallStreamsRunning, initial_caller.number_of_LinphoneCallStreamsRunning + 1) && wait_for(callee_mgr->lc, caller_mgr->lc, &callee_mgr->stat.number_of_LinphoneCallStreamsRunning, initial_callee.number_of_LinphoneCallStreamsRunning + 1); } @@ -255,28 +254,28 @@ static void early_media_video_during_video_call_test(void) { laure_params = configure_for_early_media_video_sending(laure); /* Normal automatically accepted video call from marie to pauline. */ - CU_ASSERT_TRUE(video_call_with_params(marie, pauline, marie_params, pauline_params, TRUE)); + BC_ASSERT_TRUE(video_call_with_params(marie, pauline, marie_params, pauline_params, TRUE)); /* Wait for 2s. */ wait_for_three_cores(marie->lc, pauline->lc, NULL, 2000); /* Early media video call from laure to marie. */ - CU_ASSERT_TRUE(video_call_with_params(laure, marie, laure_params, NULL, FALSE)); + BC_ASSERT_TRUE(video_call_with_params(laure, marie, laure_params, NULL, FALSE)); /* Wait for 2s. */ wait_for_three_cores(marie->lc, pauline->lc, laure->lc, 2000); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &laure->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &laure->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 2); - CU_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1); - CU_ASSERT_EQUAL(laure->stat.number_of_video_windows_created, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 2, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1, int, "%d"); + BC_ASSERT_EQUAL(laure->stat.number_of_video_windows_created, 1, int, "%d"); linphone_call_params_unref(marie_params); linphone_call_params_unref(pauline_params); @@ -311,22 +310,22 @@ static void two_incoming_early_media_video_calls_test(void) { ms_free(ringback_path); /* Early media video call from pauline to marie. */ - CU_ASSERT_TRUE(video_call_with_params(pauline, marie, pauline_params, NULL, FALSE)); + BC_ASSERT_TRUE(video_call_with_params(pauline, marie, pauline_params, NULL, FALSE)); /* Wait for 2s. */ wait_for_three_cores(marie->lc, pauline->lc, NULL, 2000); /* Early media video call from laure to marie. */ - CU_ASSERT_TRUE(video_call_with_params(laure, marie, laure_params, NULL, FALSE)); + BC_ASSERT_TRUE(video_call_with_params(laure, marie, laure_params, NULL, FALSE)); /* Wait for 2s. */ wait_for_three_cores(marie->lc, pauline->lc, laure->lc, 2000); - CU_ASSERT_EQUAL(linphone_core_get_calls_nb(marie->lc), 2); + BC_ASSERT_EQUAL(linphone_core_get_calls_nb(marie->lc), 2, int, "%d"); if (linphone_core_get_calls_nb(marie->lc) == 2) { calls_list = linphone_core_get_calls(marie->lc); call = (LinphoneCall *)ms_list_nth_data(calls_list, 0); - CU_ASSERT_PTR_NOT_NULL(call); + BC_ASSERT_PTR_NOT_NULL(call); if (call != NULL) { LinphoneCallParams *params = linphone_call_params_copy(linphone_call_get_current_params(call)); linphone_call_params_set_audio_direction(params, LinphoneMediaDirectionSendRecv); @@ -339,16 +338,16 @@ static void two_incoming_early_media_video_calls_test(void) { } linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &laure->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, laure->lc, &laure->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 2); - CU_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1); - CU_ASSERT_EQUAL(laure->stat.number_of_video_windows_created, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 2, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1, int, "%d"); + BC_ASSERT_EQUAL(laure->stat.number_of_video_windows_created, 1, int, "%d"); linphone_call_params_unref(marie_params); linphone_call_params_unref(pauline_params); @@ -370,23 +369,23 @@ static void early_media_video_with_inactive_audio(void) { pauline_params = configure_for_early_media_video_sending(pauline); /* Early media video call from pauline to marie. */ - CU_ASSERT_TRUE(video_call_with_params(pauline, marie, pauline_params, NULL, FALSE)); + BC_ASSERT_TRUE(video_call_with_params(pauline, marie, pauline_params, NULL, FALSE)); /* Wait for 2s. */ wait_for_three_cores(marie->lc, pauline->lc, NULL, 2000); /* Check that we are in LinphoneCallOutgoingEarlyMedia state and that the ringstream is present meaning we are playing the ringback tone. */ - CU_ASSERT_EQUAL(linphone_call_get_state(linphone_core_get_current_call(pauline->lc)), LinphoneCallOutgoingEarlyMedia); - CU_ASSERT_PTR_NOT_NULL(pauline->lc->ringstream); + BC_ASSERT_EQUAL(linphone_call_get_state(linphone_core_get_current_call(pauline->lc)), LinphoneCallOutgoingEarlyMedia, int, "%d"); + BC_ASSERT_PTR_NOT_NULL(pauline->lc->ringstream); linphone_core_terminate_all_calls(marie->lc); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallEnd, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallReleased, 1)); + BC_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallReleased, 1)); - CU_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 1); - CU_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1); + BC_ASSERT_EQUAL(marie->stat.number_of_video_windows_created, 1, int, "%d"); + BC_ASSERT_EQUAL(pauline->stat.number_of_video_windows_created, 1, int, "%d"); linphone_call_params_unref(marie_params); linphone_call_params_unref(pauline_params); @@ -432,52 +431,52 @@ static void forked_outgoing_early_media_video_call_with_inactive_audio_test(void linphone_core_invite_address_with_params(pauline->lc, marie1->identity, pauline_params); linphone_call_params_destroy(pauline_params); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallIncomingEarlyMedia, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallOutgoingEarlyMedia, 1, 3000)); pauline_call = linphone_core_get_current_call(pauline->lc); marie1_call = linphone_core_get_current_call(marie1->lc); marie2_call = linphone_core_get_current_call(marie2->lc); - CU_ASSERT_PTR_NOT_NULL(pauline_call); - CU_ASSERT_PTR_NOT_NULL(marie1_call); - CU_ASSERT_PTR_NOT_NULL(marie2_call); + BC_ASSERT_PTR_NOT_NULL(pauline_call); + BC_ASSERT_PTR_NOT_NULL(marie1_call); + BC_ASSERT_PTR_NOT_NULL(marie2_call); if (pauline_call && marie1_call && marie2_call) { /* wait a bit that streams are established */ wait_for_list(lcs, &dummy, 1, 6000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth == 0); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth == 0); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth == 0); - CU_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth == 0); - CU_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); - CU_ASSERT_TRUE(linphone_call_get_video_stats(marie2_call)->download_bandwidth > 0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth == 0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth == 0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie2_call)->download_bandwidth == 0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth == 0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(marie2_call)->download_bandwidth > 0); linphone_call_params_set_audio_direction(marie1_params, LinphoneMediaDirectionSendRecv); linphone_core_accept_call_with_params(marie1->lc, linphone_core_get_current_call(marie1->lc), marie1_params); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallStreamsRunning, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1, 3000)); /* marie2 should get her call terminated */ - CU_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 1000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie2->stat.number_of_LinphoneCallEnd, 1, 1000)); /*wait a bit that streams are established*/ wait_for_list(lcs, &dummy, 1, 3000); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth > 71); - CU_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth > 71); - CU_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth > 0); - CU_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(pauline_call)->download_bandwidth > 71); + BC_ASSERT_TRUE(linphone_call_get_audio_stats(marie1_call)->download_bandwidth > 71); + BC_ASSERT_TRUE(linphone_call_get_video_stats(pauline_call)->download_bandwidth > 0); + BC_ASSERT_TRUE(linphone_call_get_video_stats(marie1_call)->download_bandwidth > 0); /* send an INFO in reverse side to check that dialogs are properly established */ info = linphone_core_create_info_message(marie1->lc); linphone_call_send_info_message(marie1_call, info); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_inforeceived, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_inforeceived, 1, 3000)); } linphone_core_terminate_all_calls(pauline->lc); - CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEnd, 1, 3000)); - CU_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallEnd, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEnd, 1, 3000)); + BC_ASSERT_TRUE(wait_for_list(lcs, &marie1->stat.number_of_LinphoneCallEnd, 1, 3000)); linphone_call_params_destroy(marie1_params); linphone_call_params_destroy(marie2_params); diff --git a/tools/Makefile.am b/tools/Makefile.am index ab76dddb2..ecd6cab5a 100644 --- a/tools/Makefile.am +++ b/tools/Makefile.am @@ -19,7 +19,7 @@ EXTRA_DIST=xml2lpc_jni.cc lpc2xml_jni.cc if BUILD_TOOLS -bin_PROGRAMS=xml2lpc_test lpc2xml_test lp-gen-wrappers auto_answer +bin_PROGRAMS=xml2lpc_test lpc2xml_test lp-gen-wrappers lp-autoanswer xml2lpc_test_SOURCES=\ xml2lpc_test.c @@ -42,9 +42,9 @@ lp_gen_wrappers_SOURCES=genwrappers.cc \ lp_gen_wrappers_LDADD= \ $(LIBXML2_LIBS) -auto_answer_SOURCES=auto_answer.c -auto_answer_CFLAGS=$(COMMON_CFLAGS) -auto_answer_LDADD=\ +lp_autoanswer_SOURCES=auto_answer.c +lp_autoanswer_CFLAGS=$(COMMON_CFLAGS) +lp_autoanswer_LDADD=\ $(top_builddir)/coreapi/liblinphone.la \ $(MEDIASTREAMER_LIBS) diff --git a/tools/python/doc/source/conf.py b/tools/python/doc/source/conf.py index 8dfeec972..c01ba688d 100644 --- a/tools/python/doc/source/conf.py +++ b/tools/python/doc/source/conf.py @@ -53,9 +53,9 @@ copyright = u'2014, Belledonne Communications' # built documents. # # The short X.Y version. -version = '3.7' +version = '3.8' # The full version, including alpha/beta/rc tags. -release = '3.7.0' +release = '3.8.2' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages.