Merge remote-tracking branch 'linphone/master'

This commit is contained in:
Simon Morlat 2015-01-23 12:48:22 +01:00
commit 2293421958
134 changed files with 8353 additions and 4682 deletions

View file

@ -22,7 +22,7 @@
<folderInfo id="0.2079208171." name="/" resourcePath="">
<toolChain id="org.eclipse.cdt.build.core.prefbase.toolchain.2084203071" name="No ToolChain" resourceTypeBasedDiscovery="false" superClass="org.eclipse.cdt.build.core.prefbase.toolchain">
<targetPlatform binaryParser="org.eclipse.cdt.core.MachO64;org.eclipse.cdt.core.ELF" id="org.eclipse.cdt.build.core.prefbase.toolchain.2084203071.81924294" name=""/>
<builder arguments="-j4 CFLAGS=&quot;-g -Wall -Werror -Qunused-arguments&quot; CXXFLAGS=&quot;-g&quot;" autoBuildTarget="all" cleanBuildTarget="clean" command="make" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.731584538" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="false" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<builder arguments="-j4" autoBuildTarget="all" cleanBuildTarget="clean" command="make" enableAutoBuild="false" enableCleanBuild="true" enabledIncrementalBuild="true" id="org.eclipse.cdt.build.core.settings.default.builder.731584538" incrementalBuildTarget="all" keepEnvironmentInBuildfile="false" managedBuildOn="false" name="Gnu Make Builder" parallelBuildOn="false" superClass="org.eclipse.cdt.build.core.settings.default.builder"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.libs.1252970003" name="holder for library settings" superClass="org.eclipse.cdt.build.core.settings.holder.libs"/>
<tool id="org.eclipse.cdt.build.core.settings.holder.1371414073" name="GNU C++" superClass="org.eclipse.cdt.build.core.settings.holder">
<inputType id="org.eclipse.cdt.build.core.settings.holder.inType.306286573" languageId="org.eclipse.cdt.core.g++" languageName="GNU C++" sourceContentType="org.eclipse.cdt.core.cxxSource,org.eclipse.cdt.core.cxxHeader" superClass="org.eclipse.cdt.build.core.settings.holder.inType"/>

4
.gitignore vendored
View file

@ -82,3 +82,7 @@ Linphone.app
*.dmg
tester/linphone*.log
tester/linphone_log.txt
.tx/linphone-gtk.linphonedesktopin/
po/linphone.pot
.tx/linphone-gtk.audio-assistantdesktopin/
tester/linphone_log.gz.txt

View file

@ -1,10 +1,20 @@
[main]
host = https://www.transifex.com
minimum_perc = 1
type = PO
[linphone-gtk.linphonepot]
file_filter = po/<lang>.po
source_file = po/linphone.pot
source_lang = en
type = PO
[linphone-gtk.linphonedesktopin]
source_file = share/linphone.desktop.in
source_lang = en
type = DESKTOP
[linphone-gtk.audio-assistantdesktopin]
source_file = share/audio-assistant.desktop.in
source_lang = en
type = DESKTOP

View file

@ -86,6 +86,12 @@ if(ENABLE_TUNNEL)
set(ENABLE_TUNNEL OFF CACHE BOOL "Enable tunnel support." FORCE)
endif()
endif()
if(ENABLE_MSG_STORAGE)
find_package(Sqlite3)
if(NOT SQLITE3_FOUND)
message(FATAL_ERROR "Could not find the sqlite3 library!")
endif()
endif()
if(ENABLE_NOTIFY)
find_package(Notify)
if(NOTIFY_FOUND)
@ -95,6 +101,16 @@ if(ENABLE_NOTIFY)
set(ENABLE_NOTIFY OFF CACHE BOOL "Enable libnotify support." FORCE)
endif()
endif()
if(ENABLE_ASSISTANT)
find_package(Soup)
if(SOUP_FOUND)
set(BUILD_WIZARD 1)
else()
message(WARNING "Could not find the soup library!")
set(ENABLE_ASSISTANT OFF CACHE BOOL "Turn on assistant compiling." FORCE)
endif()
endif()
find_package(Gettext)
include_directories(
@ -106,15 +122,22 @@ include_directories(
${MS2_INCLUDE_DIRS}
${XML2_INCLUDE_DIRS}
)
if(SQLITE3_FOUND)
include_directories(${SQLITE3_INCLUDE_DIRS})
add_definitions("-DMSG_STORAGE_ENABLED")
endif()
if(ENABLE_TUNNEL)
include_directories(${TUNNEL_INCLUDE_DIRS})
endif()
if(ENABLE_ASSISTANT)
include_directories(${SOUP_INCLUDE_DIRS})
endif()
if(MSVC)
include_directories(${CMAKE_PREFIX_PATH}/include/MSVC)
endif()
add_definitions(-DIN_LINPHONE)
add_definitions("-DIN_LINPHONE")
if(MSVC)
@ -163,6 +186,7 @@ add_subdirectory(share)
if(ENABLE_GTK_UI)
add_subdirectory(gtk)
add_subdirectory(pixmaps)
add_subdirectory(po)
endif()
if(ENABLE_TOOLS)
add_subdirectory(tools)
@ -172,7 +196,9 @@ if(ENABLE_UNIT_TESTS)
endif()
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLinphone.cmake
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLinphone.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindLinphone.cmake)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FindLinphone.cmake
DESTINATION share/cmake/Modules
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)

View file

@ -6,6 +6,8 @@ ACLOCAL_AMFLAGS = -I m4 $(ACLOCAL_MACOS_FLAGS)
SUBDIRS = build m4 pixmaps po @ORTP_DIR@ @MS2_DIR@ \
coreapi console gtk share scripts tools daemon tester include
GITVERSION=`cd $(top_srcdir) && git describe --always || echo $(VERSION)`
ACLOCAL_FLAGS=-I$(top_srcdir)/m4
@ -19,11 +21,11 @@ OPTIONAL_SOUNDS=\
INSTALLDIR=$(abs_top_builddir)/linphone-install
INSTALLDIR_WITH_PREFIX=$(INSTALLDIR)/$(prefix)
ZIPFILE=$(abs_top_builddir)/$(PACKAGE)-win32-$(VERSION).zip
ZIPFILE=$(abs_top_builddir)/$(PACKAGE)-win32-$(GITVERSION).zip
ZIP_EXCLUDED=include lib \
$(OPTIONAL_SOUNDS)
SDK_ZIPFILE=$(abs_top_builddir)/lib$(PACKAGE)-win32-$(VERSION).zip
SDK_ZIPFILE=$(abs_top_builddir)/lib$(PACKAGE)-win32-sdk-$(GITVERSION).zip
SDK_EXCLUDED= \
bin/linphone.exe \
lib/*.la \
@ -172,7 +174,7 @@ setup.exe: filelist
cp $(ISS_SCRIPT) $(INSTALLDIR_WITH_PREFIX)/.
cd $(INSTALLDIR_WITH_PREFIX) && \
$(ISCC) $(ISS_SCRIPT)
mv $(INSTALLDIR_WITH_PREFIX)/Output/setup.exe $(PACKAGE)-$(VERSION)-setup.exe
mv $(INSTALLDIR_WITH_PREFIX)/Output/setup.exe $(PACKAGE)-setup-$(GITVERSION).exe
rm -rf $(INSTALLDIR_WITH_PREFIX)/Output
rm -f $(INSTALLDIR_WITH_PREFIX)/$(PACKAGE_WIN32_FILELIST)
rm -f $(INSTALLDIR_WITH_PREFIX)/$(ISS_SCRIPT)
@ -200,11 +202,12 @@ Portfile-devel: $(top_srcdir)/scripts/Portfile-devel.tmpl dist
### MAC
MACAPPNAME=Linphone.app
MACAPPZIP=$(PACKAGE)-$(VERSION).app.zip
MACAPPDMG=$(PACKAGE)-$(VERSION).dmg
MACAPPZIP=$(PACKAGE)-$(GITVERSION).app.zip
MACAPPDMG=$(PACKAGE)-$(GITVERSION).dmg
BUNDLEPREFIX=./
BUNDLEDIR=$(BUNDLEPREFIX)$(MACAPPNAME)
#a path prefix where additional libs can be cherry-picked by the bundler.
LINPHONE_ADDITIONAL_DEPENDENCIES_PREFIX=/usr/local
bundle:
rm -rf $(INSTALLDIR)
@ -214,6 +217,7 @@ bundle:
LINPHONE_INSTALL_PREFIX=$(INSTALLDIR_WITH_PREFIX) \
LIBLINPHONE_INSTALL_PREFIX=$(INSTALLDIR_WITH_PREFIX) \
MS2_PLUGINS_INSTALL_PREFIX=$(prefix) \
LINPHONE_ADDITIONAL_DEPENDENCIES_PREFIX=$(LINPHONE_ADDITIONAL_DEPENDENCIES_PREFIX) \
gtk-mac-bundler $(PACKAGE_BUNDLE_FILE)
printf "[Pango]\nModuleFiles=./etc/pango/pango.modules\n" \
> $(BUNDLEDIR)/Contents/Resources/etc/pango/pangorc

11
NEWS
View file

@ -1,3 +1,14 @@
linphone-3.8.0 -- Date to be defined
Application level improvements:
* The video window has now controls in order to switch fullscreen mode and terminate call.
* The out of call video preview feature (to test camera) is moved into the settings and is no longer linked to the in-call video preview feature.
* Lots of updated translations.
Liblinphone level improvements:
* Support for RTP/AVPF (RFCxxxx) for video streams, allowing fast transmission error recovery with VP8 codec only.
* API enhancements, most objects can be ref-counted.
* Call video recording feature, in mkv format (H264 streams only for the moment)
linphone-3.7.0 -- February 20th, 2014
Application level improvements:
* It is now possible to configure multiple proxy accounts with different transports (UDP, TCP, TLS)

View file

@ -1,12 +1,18 @@
# Compiling Linphone on MacOS X
# Linphone on MacOS X
## Dependencies
## Build prerequisite
* Xcode (download from apple or using appstore application)
* Java SE
* [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/).
* [Java SE](http://www.oracle.com/technetwork/java/javase/downloads/index.html) or openJDK
This is required to generate a C sourcefile from SIP grammar using [antlr3](http://www.antlr3.org/) generator.
* [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/).
* [XQuartz](https://xquartz.macosforge.org) for GTK version.
### Multiple MacOS version support
### Dependencies
#### Using MacPorts
##### Multiple MacOS version support
In order to enable generation of bundle for multiple MacOS version and 32 bit processors, it is recommended to:
@ -18,17 +24,16 @@ In order to enable generation of bundle for multiple MacOS version and 32 bit pr
> +universal
### Build time dependencies
#### Using MacPorts
##### Linphone library (liblinphone)
* Linphone core dependencies
sudo port install automake autoconf libtool intltool wget cunit \
sudo port install automake autoconf libtool pkgconfig intltool wget cunit \
antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp \
ffmpeg-devel -gpl2
* UI dependencies: install `GTK`. It is recommended to use the `quartz` backend for better integration.
##### Linphone UI (GTK version)
Install `GTK`. It is recommended to use the `quartz` backend for better integration.
sudo port install gtk2 +quartz +no_x11
sudo port install gtk-osx-application -python27
@ -36,15 +41,21 @@ In order to enable generation of bundle for multiple MacOS version and 32 bit pr
#### Using HomeBrew
brew install automake intltool libtool pkg-config coreutils \
yasm nasm wget imagemagick gettext gtk+ speex ffmpeg pygtk
brew link gettext --force
# readline is required from linphonec.c otherwise compilation will fail
brew link readline --force
##### Linphone library (liblinphone)
# then you have to install some dependencies from a tap.
brew tap Gui13/linphone
brew install antlr3.2 libantlr3.4c mattintosh4/gtk-mac-integration/gtk-mac-integration
brew install intltool libtool wget pkg-config automake libantlr3.4c \
antlr3.2 gettext speex ffmpeg readline libvpx opus
ln -s /usr/local/bin/glibtoolize /usr/local/bin/libtoolize
brew link --force gettext
##### Linphone UI (GTK version)
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
### Building Linphone
@ -58,7 +69,7 @@ The next pieces need to be compiled manually.
export CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5"
export LDFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5 -Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress"
* Install libantlr3c (library used by belle-sip for parsing)
* (MacPorts only) Install libantlr3c (library used by belle-sip for parsing)
git clone -b linphone git://git.linphone.org/antlr3.git
cd antlr3/runtime/C
@ -112,11 +123,12 @@ 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 --disable-x11 --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make
* Install on the system
sudo make install
You are done.
### Generate portable bundle
@ -126,7 +138,7 @@ If you want to generate a portable bundle, then install `gtk-mac-bundler`:
git clone https://github.com/jralls/gtk-mac-bundler.git
cd gtk-mac-bundler && make install
export PATH=$PATH:~/.local/bin
#make this dummy charset.alias file for the bundler to be happy:
# make this dummy charset.alias file for the bundler to be happy:
sudo touch /opt/local/lib/charset.alias
The bundler file in `build/MacOS/linphone.bundle` expects some plugins to be installed in `/opt/local/lib/mediastreamer/plugins`.
@ -136,6 +148,15 @@ If you don't need plugins, remove or comment out this line from the bundler file
${prefix:ms2plugins}/lib/mediastreamer/plugins/*.*.so
</binary>
If using HomeBrew, this is not working yet. However you will at least need to:
brew install shared-mime-info glib-networking hicolor-icon-theme
update-mime-database /usr/local/share/mime
And modify also:
<prefix name="default">/usr/local</prefix>
Then run, inside Linphone source tree configure as told before but with `--enable-relativeprefix` appended.
make && make bundle

View file

@ -40,6 +40,7 @@ LOCAL_SRC_FILES := \
bellesip_sal/sal_op_publish.c \
bellesip_sal/sal_op_registration.c \
bellesip_sal/sal_sdp.c \
buffer.c \
callbacks.c \
call_log.c \
call_params.c \
@ -217,16 +218,18 @@ LOCAL_CFLAGS += -DBUILD_UPNP
LOCAL_SRC_FILES += upnp.c
endif
LOCAL_STATIC_LIBRARIES += libspeex
LOCAL_STATIC_LIBRARIES += libspeex
ifeq ($(BUILD_SRTP), 1)
LOCAL_C_INCLUDES += $(SRTP_C_INCLUDE)
endif
ifeq ($(BUILD_ILBC), 1)
ifneq ($(TARGET_ARCH_ABI),armeabi)
LOCAL_CFLAGS += -DHAVE_ILBC=1
LOCAL_STATIC_LIBRARIES += libmsilbc
endif
endif
LOCAL_C_INCLUDES += $(LIBLINPHONE_EXTENDED_C_INCLUDES)
LOCAL_WHOLE_STATIC_LIBRARIES += $(LIBLINPHONE_EXTENDED_STATIC_LIBS)
@ -252,8 +255,8 @@ endif
ifeq ($(BUILD_OPUS),1)
LOCAL_STATIC_LIBRARIES += libopus
endif
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_C_INCLUDES)
LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS)
ifeq ($(_BUILD_VIDEO),1)
LOCAL_SHARED_LIBRARIES += \

View file

@ -17,7 +17,9 @@ common_SRC_FILES := \
log_collection_tester.c \
transport_tester.c \
player_tester.c \
dtmf_tester.c
dtmf_tester.c \
accountmanager.c \
offeranswer_tester.c
common_C_INCLUDES += \
$(LOCAL_PATH) \

View file

@ -26,6 +26,8 @@
<string>Copyright 2011 Belledonne Communications</string>
<key>LSMinimumSystemVersion</key>
<string>10.4</string>
<key>NSAppSleepDisabled</key>
<string>YES</string>
</dict>
</plist>

View file

@ -1,4 +1,5 @@
export EXTRA_ARGS="--workdir $bundle_res"
#export EXTRA_ARGS="--workdir $bundle_res"
export LINPHONE_WORKDIR="$bundle_res"
export GIO_EXTRA_MODULES="$bundle_lib/gio/modules"
export PANGO_LIBDIR="$bundle_lib"
export PANGO_SYSCONFDIR="$bundle_etc"

View file

@ -16,7 +16,7 @@
<prefix name="linphone">${env:LINPHONE_INSTALL_PREFIX}</prefix>
<prefix name="ms2plugins">${env:MS2_PLUGINS_INSTALL_PREFIX}</prefix>
<!-- This prefix definition is necessary if some dependencies are to be taken from /usr/local/lib -->
<prefix name="local">/usr/local</prefix>
<prefix name="local">${env:LINPHONE_ADDITIONAL_DEPENDENCIES_PREFIX}</prefix>
<!-- The project directory is the default location of the created
app. If you leave out the path, the current directory is
used. Note the usage of an environment variable here again.

View file

@ -110,6 +110,7 @@
<ClCompile Include="..\..\coreapi\bellesip_sal\sal_op_publish.c" />
<ClCompile Include="..\..\coreapi\bellesip_sal\sal_op_registration.c" />
<ClCompile Include="..\..\coreapi\bellesip_sal\sal_sdp.c" />
<ClCompile Include="..\..\coreapi\buffer.c" />
<ClCompile Include="..\..\coreapi\call_log.c" />
<ClCompile Include="..\..\coreapi\call_params.c" />
<ClCompile Include="..\..\coreapi\callbacks.c" />
@ -145,6 +146,7 @@
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\coreapi\bellesip_sal\sal_impl.h" />
<ClInclude Include="..\..\coreapi\buffer.h" />
<ClInclude Include="..\..\coreapi\content.h" />
<ClInclude Include="..\..\coreapi\enum.h" />
<ClInclude Include="..\..\coreapi\event.h" />

View file

@ -30,4 +30,4 @@ namespace linphone_tester_native
Platform::String^ testName(Platform::String^ suiteName, int testIndex);
void run(Platform::String^ suiteName, Platform::String^ caseName, Platform::Boolean verbose);
};
}
}

View file

@ -32,6 +32,9 @@ find_package(ORTP REQUIRED)
find_package(MS2 REQUIRED)
find_package(XML2 REQUIRED)
find_package(BelleSIP REQUIRED)
if(@ENABLE_MSG_STORAGE@)
find_package(Sqlite3)
endif()
set(_LINPHONE_ROOT_PATHS
${WITH_LINPHONE}
@ -56,6 +59,12 @@ find_library(LINPHONE_LIBRARIES
list(APPEND LINPHONE_INCLUDE_DIRS ${ORTP_INCLUDE_DIRS} ${MS2_INCLUDE_DIRS} ${XML2_INCLUDE_DIRS} ${BELLESIP_INCLUDE_DIRS})
list(APPEND LINPHONE_LIBRARIES ${ORTP_LIBRARIES} ${MS2_LIBRARIES} ${XML2_LIBRARIES} ${BELLESIP_LIBRARIES})
if(SQLITE3_FOUND)
list(APPEND LINPHONE_INCLUDE_DIRS ${SQLITE3_INCLUDE_DIRS})
list(APPEND LINPHONE_LIBRARIES ${SQLITE3_LIBRARIES})
endif()
if(WIN32)
list(APPEND LINPHONE_LIBRARIES shlwapi)
endif(WIN32)

View file

@ -22,9 +22,9 @@
#
# - Find the notify include file and library
#
# NOTIFY_FOUND - system has linphone
# NOTIFY_INCLUDE_DIRS - the linphone include directory
# NOTIFY_LIBRARIES - The libraries needed to use linphone
# NOTIFY_FOUND - system has libnotify
# NOTIFY_INCLUDE_DIRS - the libnotify include directory
# NOTIFY_LIBRARIES - The libraries needed to use libnotify
set(_NOTIFY_ROOT_PATHS
${WITH_NOTIFY}

63
cmake/FindSoup.cmake Normal file
View file

@ -0,0 +1,63 @@
############################################################################
# FindSoup.cmake
# 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.
#
############################################################################
#
# - Find the soup include file and library
#
# SOUP_FOUND - system has libsoup
# SOUP_INCLUDE_DIRS - the libsoup include directory
# SOUP_LIBRARIES - The libraries needed to use libsoup
find_package(GTK2 2.18 REQUIRED gtk)
set(_SOUP_ROOT_PATHS
${WITH_SOUP}
${CMAKE_INSTALL_PREFIX}
)
find_path(SOUP_INCLUDE_DIRS
NAMES libsoup/soup.h
HINTS _SOUP_ROOT_PATHS
PATH_SUFFIXES include/libsoup-2.4
)
if(SOUP_INCLUDE_DIRS)
set(HAVE_LIBSOUP_SOUP_H 1)
list(APPEND SOUP_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS})
endif()
find_library(SOUP_LIBRARIES
NAMES soup-2.4
HINTS ${_SOUP_ROOT_PATHS}
PATH_SUFFIXES bin lib
)
if(SOUP_LIBRARIES)
list(APPEND SOUP_LIBRARIES ${GTK2_LIBRARIES})
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(Soup
DEFAULT_MSG
SOUP_INCLUDE_DIRS SOUP_LIBRARIES HAVE_LIBSOUP_SOUP_H
)
mark_as_advanced(SOUP_INCLUDE_DIRS SOUP_LIBRARIES HAVE_LIBSOUP_SOUP_H)

View file

@ -36,6 +36,7 @@
#define PACKAGE_DATA_DIR "${PACKAGE_DATA_DIR}"
#define PACKAGE_SOUND_DIR "${PACKAGE_SOUND_DIR}"
#cmakedefine BUILD_WIZARD
#cmakedefine HAVE_NOTIFY4
#cmakedefine HAVE_CU_GET_SUITE 1
#cmakedefine HAVE_CU_CURSES 1

View file

@ -62,7 +62,7 @@ case $target in
*mingw*)
CFLAGS="$CFLAGS -DORTP_STATIC -D_WIN32_WINNT=0x0501 "
CXXFLAGS="$CXXFLAGS -DORTP_STATIC -D_WIN32_WINNT=0x0501"
LIBS="$LIBS -lws2_32"
LIBS="$LIBS -L/lib -lws2_32"
GUI_FLAGS="-mwindows"
CONSOLE_FLAGS="-mconsole"
mingw_found=yes
@ -129,7 +129,7 @@ AC_CONFIG_COMMANDS([libtool-hacking],
dnl Add the languages which your application supports here.
PKG_PROG_PKG_CONFIG
ALL_LINGUAS="fr it de ja es pl cs nl sv pt_BR hu ru zh_CN nb_NO zh_TW he sr"
ALL_LINGUAS=$(cd po && echo *.po | sed 's/\.po//g')
AC_SUBST(ALL_LINGUAS)
AC_DEFINE_UNQUOTED(LINPHONE_ALL_LANGS, "$ALL_LINGUAS", [All supported languages])
@ -158,13 +158,16 @@ dnl AC_CHECK_LIB(intl,libintl_gettext)
AC_CHECK_FUNCS([get_current_dir_name strndup stpcpy] )
AC_ARG_ENABLE(x11,
[AS_HELP_STRING([--disable-x11], [Disable X11 support (default=no)])],
[AS_HELP_STRING([--disable-x11], [Disable X11 support (default=yes for MacOSX, no otherwise)])],
[case "${enableval}" in
yes) enable_x11=true ;;
no) enable_x11=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-x11) ;;
esac],
[enable_x11=true]
[case "$target_os" in
*darwin*) enable_x11=false ;; #disable x11 on MacOS by default
*) enable_x11=true ;;
esac]
)
dnl conditional build of LDAP support
@ -268,6 +271,43 @@ if test "$build_upnp" != "false" ; then
AC_DEFINE(BUILD_UPNP, 1, [Define if upnp enabled])
fi
dnl check zlib
AC_ARG_ENABLE(zlib,
[AS_HELP_STRING([--disable-zlib], [Disable ZLib support])],
[case "${enableval}" in
yes) build_zlib=true ;;
no) build_zlib=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-zlib) ;;
esac],
[build_zlib=auto]
)
if test "$build_zlib" != "false" ; then
PKG_CHECK_MODULES(ZLIB, [zlib], [found_zlib=yes], [found_zlib=no])
if test "x$found_zlib" = "xno" ; then
AC_CHECK_LIB(z, inflate,
[AC_CHECK_HEADER([zlib.h],
[AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([[
#include <zlib.h>
#if !defined(ZLIB_VERNUM) || (ZLIB_VERNUM < 0x1230)
// compile error
#endif
]],[])],
[found_zlib=yes])])])
if test "x$found_zlib" = "xno" ; then
AC_MSG_NOTICE([zlib library and headers not found])
else
AC_DEFINE( HAVE_ZLIB, 1, [ZLIB support] )
ZLIB_LIBS='-lz'
AC_SUBST(ZLIB_LIBS)
fi
else
AC_MSG_NOTICE([ZLIB found])
AC_DEFINE( HAVE_ZLIB, 1, [ZLIB support] )
fi
fi
dnl check libxml2
PKG_CHECK_MODULES(LIBXML2, [libxml-2.0],[libxml2_found=yes],foo=bar)
if test "$libxml2_found" != "yes" ; then
@ -781,8 +821,6 @@ AC_ARG_ENABLE(msg-storage,
[enable_msg_storage=auto]
)
AM_CONDITIONAL(BUILD_MSG_STORAGE, test x$enable_msg_storage = xtrue)
if test x$enable_msg_storage != xfalse; then
PKG_CHECK_MODULES(SQLITE3,[sqlite3 >= 3.6.0],[found_sqlite=yes],[found_sqlite=no])
if test "$found_sqlite" = "no"; then
@ -791,6 +829,7 @@ if test x$enable_msg_storage != xfalse; then
fi
if test "$found_sqlite" = "yes"; then
SQLITE3_CFLAGS+="-DMSG_STORAGE_ENABLED"
enable_msg_storage=true
else
if test x$enable_msg_storage = xtrue; then
AC_MSG_ERROR([sqlite3, required for message storage, not found])
@ -802,7 +841,7 @@ if test x$enable_msg_storage != xfalse; then
AC_SUBST(SQLITE3_LIBS)
fi
AM_CONDITIONAL(BUILD_MSG_STORAGE, test x$enable_msg_storage = xtrue)
PKG_CHECK_MODULES(BELLESIP, [belle-sip >= 1.3.1])
@ -946,6 +985,7 @@ printf "* %-30s %s\n" "Message storage" $enable_msg_storage
printf "* %-30s %s\n" "zRTP encryption" $zrtp
printf "* %-30s %s\n" "uPnP support" $build_upnp
printf "* %-30s %s\n" "LDAP support" $enable_ldap
printf "* %-30s %s\n" "ZLIB support" $found_zlib
if test "$enable_tunnel" = "true" ; then
printf "* %-30s %s\n" "Tunnel support" "true"

View file

@ -42,6 +42,7 @@ set(SOURCE_FILES
bellesip_sal/sal_op_publish.c
bellesip_sal/sal_op_registration.c
bellesip_sal/sal_sdp.c
buffer.c
callbacks.c
call_log.c
call_params.c
@ -96,6 +97,9 @@ if(ENABLE_TUNNEL)
else()
list(APPEND SOURCE_FILES linphone_tunnel_stubs.c)
endif()
if(ENABLE_ASSISTANT)
list(APPEND SOURCE_FILES sipwizard.c)
endif()
set(GENERATED_SOURCE_FILES
${CMAKE_CURRENT_BINARY_DIR}/liblinphone_gitversion.h
@ -117,9 +121,15 @@ set(LIBS
${MS2_LIBRARIES}
${XML2_LIBRARIES}
)
if(SQLITE3_FOUND)
list(APPEND LIBS ${SQLITE3_LIBRARIES})
endif()
if(ENABLE_TUNNEL)
list(APPEND LIBS ${TUNNEL_LIBRARIES})
endif()
if(ENABLE_ASSISTANT)
list(APPEND LIBS ${SOUP_LIBRARIES})
endif()
if(WIN32)
list(APPEND LIBS shlwapi)
endif()
@ -129,7 +139,7 @@ if(ENABLE_STATIC)
target_link_libraries(linphone ${LIBS})
else()
add_library(linphone SHARED ${SOURCE_FILES} ${GENERATED_SOURCE_FILES})
set_target_properties(linphone PROPERTIES VERSION ${LINPHONE_VERSION} SOVERSION ${LINPHONE_SO_VERSION} LINKER_LANGUAGE CXX)
set_target_properties(linphone PROPERTIES VERSION ${LINPHONE_SO_VERSION} LINKER_LANGUAGE CXX)
target_link_libraries(linphone ${LIBS})
if(MSVC)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
@ -150,6 +160,7 @@ install(TARGETS linphone
set(HEADER_FILES
buffer.h
call_log.h
call_params.h
content.h

View file

@ -25,6 +25,7 @@ CLEANFILES=$(GITVERSION_FILE)
linphone_includedir=$(includedir)/linphone
linphone_include_HEADERS=\
buffer.h \
call_log.h \
call_params.h \
content.h \
@ -44,6 +45,7 @@ lib_LTLIBRARIES=liblinphone.la
liblinphone_la_SOURCES=\
address.c \
authentication.c \
buffer.c \
callbacks.c \
call_log.c \
call_params.c \
@ -136,7 +138,9 @@ liblinphone_la_LIBADD= \
$(LIBSOUP_LIBS) \
$(SQLITE3_LIBS) \
$(LIBXML2_LIBS) \
$(LDAP_LIBS) $(SASL_LIBS)
$(LDAP_LIBS) \
$(SASL_LIBS) \
$(ZLIB_LIBS)
if ENABLE_TESTS
@ -173,7 +177,9 @@ COMMON_CFLAGS=\
$(TUNNEL_CFLAGS) \
$(SQLITE3_CFLAGS) \
$(LIBXML2_CFLAGS) \
$(LDAP_CFLAGS) $(SASL_CFLAGS)
$(LDAP_CFLAGS) \
$(SASL_CFLAGS) \
$(ZLIB_CFLAGS)
if BUILD_WIZARD
COMMON_CFLAGS+= -DBUILD_WIZARD

View file

@ -159,6 +159,13 @@ bool_t linphone_address_is_secure(const LinphoneAddress *uri){
return sal_address_is_secure(uri);
}
/**
* returns true if address is a routable sip address
*/
bool_t linphone_address_is_sip(const LinphoneAddress *uri){
return sal_address_is_sip(uri);
}
static bool_t strings_equals(const char *s1, const char *s2){
if (s1==NULL && s2==NULL) return TRUE;
if (s1!=NULL && s2!=NULL && strcmp(s1,s2)==0) return TRUE;
@ -167,7 +174,10 @@ static bool_t strings_equals(const char *s1, const char *s2){
/**
* Compare two LinphoneAddress ignoring tags and headers, basically just domain, username, and port.
* Returns TRUE if they are equal.
* @param[in] a1 LinphoneAddress object
* @param[in] a2 LinphoneAddress object
* @return Boolean value telling if the LinphoneAddress objects are equal.
* @see linphone_address_equal()
**/
bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddress *a2){
const char *u1,*u2;
@ -182,6 +192,27 @@ bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddr
return strings_equals(u1,u2) && strings_equals(h1,h2) && p1==p2;
}
/**
* Compare two LinphoneAddress taking the tags and headers into account.
* @param[in] a1 LinphoneAddress object
* @param[in] a2 LinphoneAddress object
* @return Boolean value telling if the LinphoneAddress objects are equal.
* @see linphone_address_weak_equal()
*/
bool_t linphone_address_equal(const LinphoneAddress *a1, const LinphoneAddress *a2) {
char *s1;
char *s2;
bool_t res;
if ((a1 == NULL) && (a2 == NULL)) return TRUE;
if ((a1 == NULL) || (a2 == NULL)) return FALSE;
s1 = linphone_address_as_string(a1);
s2 = linphone_address_as_string(a2);
res = (strcmp(s1, s2) == 0) ? TRUE : FALSE;
ms_free(s1);
ms_free(s2);
return res;
}
/**
* Destroys a LinphoneAddress object (actually calls linphone_address_unref()).
* @deprecated Use linphone_address_unref() instead

View file

@ -151,6 +151,11 @@ char *sal_address_as_string(const SalAddress *addr){
return ms_strdup(tmp);
}
bool_t sal_address_is_sip(const SalAddress *addr){
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
return belle_sip_header_address_get_uri(header_addr) != NULL;
}
char *sal_address_as_string_uri_only(const SalAddress *addr){
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
belle_sip_uri_t* sip_uri = belle_sip_header_address_get_uri(header_addr);
@ -210,7 +215,7 @@ void sal_address_unref(SalAddress *addr){
belle_sip_object_unref(BELLE_SIP_HEADER_ADDRESS(addr));
}
bool_t sal_address_is_ipv6(SalAddress *addr){
bool_t sal_address_is_ipv6(const SalAddress *addr){
belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr);
belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr);
if (uri){

View file

@ -62,16 +62,19 @@ static void sdp_process(SalOp *h){
strcpy(h->result->addr,h->base.remote_media->addr);
h->result->bandwidth=h->base.remote_media->bandwidth;
for(i=0;i<sal_media_description_get_nb_active_streams(h->result);++i){
strcpy(h->result->streams[i].rtp_addr,h->base.remote_media->streams[i].rtp_addr);
h->result->streams[i].ptime=h->base.remote_media->streams[i].ptime;
h->result->streams[i].bandwidth=h->base.remote_media->streams[i].bandwidth;
h->result->streams[i].rtp_port=h->base.remote_media->streams[i].rtp_port;
strcpy(h->result->streams[i].rtcp_addr,h->base.remote_media->streams[i].rtcp_addr);
h->result->streams[i].rtcp_port=h->base.remote_media->streams[i].rtcp_port;
for(i=0;i<h->result->nb_streams;++i){
/*copy back parameters from remote description that we need in our result description*/
if (h->result->streams[i].rtp_port!=0){ /*if stream was accepted*/
strcpy(h->result->streams[i].rtp_addr,h->base.remote_media->streams[i].rtp_addr);
h->result->streams[i].ptime=h->base.remote_media->streams[i].ptime;
h->result->streams[i].bandwidth=h->base.remote_media->streams[i].bandwidth;
h->result->streams[i].rtp_port=h->base.remote_media->streams[i].rtp_port;
strcpy(h->result->streams[i].rtcp_addr,h->base.remote_media->streams[i].rtcp_addr);
h->result->streams[i].rtcp_port=h->base.remote_media->streams[i].rtcp_port;
if ((h->result->streams[i].proto == SalProtoRtpSavpf) || (h->result->streams[i].proto == SalProtoRtpSavp)) {
h->result->streams[i].crypto[0] = h->base.remote_media->streams[i].crypto[0];
if ((h->result->streams[i].proto == SalProtoRtpSavpf) || (h->result->streams[i].proto == SalProtoRtpSavp)) {
h->result->streams[i].crypto[0] = h->base.remote_media->streams[i].crypto[0];
}
}
}
}
@ -684,6 +687,11 @@ int sal_call(SalOp *op, const char *from, const char *to){
ms_message("[%s] calling [%s] on op [%p]", from, to, op);
invite=sal_op_build_request(op,"INVITE");
if( invite == NULL ){
/* can happen if the op has an invalid address */
return -1;
}
sal_op_fill_invite(op,invite);
sal_op_call_fill_cbs(op);

View file

@ -198,6 +198,9 @@ int sal_subscribe(SalOp *op, const char *from, const char *to, const char *event
sal_op_subscribe_fill_cbs(op);
/*???sal_exosip_fix_route(op); make sure to ha ;lr*/
req=sal_op_build_request(op,"SUBSCRIBE");
if( req == NULL ) {
return -1;
}
if (eventname){
if (op->event) belle_sip_object_unref(op->event);
op->event=belle_sip_header_create("Event",eventname);

View file

@ -150,20 +150,37 @@ belle_sip_request_t* sal_op_build_request(SalOp *op,const char* method) {
belle_sip_provider_t* prov=op->base.root->prov;
belle_sip_request_t *req;
belle_sip_uri_t* req_uri;
belle_sip_uri_t* to_uri;
const SalAddress* to_address;
const MSList *elem=sal_op_get_route_addresses(op);
char token[10];
/* check that the op has a correct to address */
to_address = sal_op_get_to_address(op);
if( to_address == NULL ){
ms_error("No To: address, cannot build request");
return NULL;
}
to_uri = belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(to_address));
if( to_uri == NULL ){
ms_error("To: address is invalid, cannot build request");
return NULL;
}
if (strcmp("REGISTER",method)==0 || op->privacy==SalPrivacyNone) {
from_header = belle_sip_header_from_create(BELLE_SIP_HEADER_ADDRESS(sal_op_get_from_address(op))
,belle_sip_random_token(token,sizeof(token)));
,belle_sip_random_token(token,sizeof(token)));
} else {
from_header=belle_sip_header_from_create2("Anonymous <sip:anonymous@anonymous.invalid>",belle_sip_random_token(token,sizeof(token)));
}
/*make sure to preserve components like headers or port*/
req_uri = (belle_sip_uri_t*)belle_sip_object_clone((belle_sip_object_t*)belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(sal_op_get_to_address(op))));
req_uri = (belle_sip_uri_t*)belle_sip_object_clone((belle_sip_object_t*)to_uri);
belle_sip_uri_set_secure(req_uri,sal_op_is_secure(op));
to_header = belle_sip_header_to_create(BELLE_SIP_HEADER_ADDRESS(sal_op_get_to_address(op)),NULL);
to_header = belle_sip_header_to_create(BELLE_SIP_HEADER_ADDRESS(to_address),NULL);
req=belle_sip_request_create(
req_uri,
@ -218,7 +235,10 @@ int sal_ping(SalOp *op, const char *from, const char *to){
void sal_op_set_remote_ua(SalOp*op,belle_sip_message_t* message) {
belle_sip_header_user_agent_t* user_agent=belle_sip_message_get_header_by_type(message,belle_sip_header_user_agent_t);
char user_agent_string[256];
if(user_agent && belle_sip_header_user_agent_get_products_as_string(user_agent,user_agent_string,sizeof(user_agent_string))>0) {
if (user_agent && belle_sip_header_user_agent_get_products_as_string(user_agent,user_agent_string,sizeof(user_agent_string))>0) {
if (op->base.remote_ua!=NULL){
ms_free(op->base.remote_ua);
}
op->base.remote_ua=ms_strdup(user_agent_string);
}
}
@ -313,7 +333,7 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req
}
}else{
#ifdef TUNNEL_ENABLED
if (BELLE_SIP_OBJECT_IS_INSTANCE_OF(udplp,belle_sip_tunnel_listening_point_t)){
if (udplp && BELLE_SIP_OBJECT_IS_INSTANCE_OF(udplp,belle_sip_tunnel_listening_point_t)){
/* our tunnel mode only supports UDP. Force transport to be set to UDP */
belle_sip_uri_set_transport_param(next_hop_uri,"udp");
}

View file

@ -172,6 +172,9 @@ int sal_message_send(SalOp *op, const char *from, const char *to, const char* co
op->dir=SalOpDirOutgoing;
req=sal_op_build_request(op,"MESSAGE");
if (req == NULL ){
return -1;
}
if (sal_op_get_contact_address(op)){
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(sal_op_create_contact(op)));
}

View file

@ -306,8 +306,10 @@ int sal_subscribe_presence(SalOp *op, const char *from, const char *to, int expi
belle_sip_parameters_remove_parameter(BELLE_SIP_PARAMETERS(op->base.from_address),"tag");
belle_sip_parameters_remove_parameter(BELLE_SIP_PARAMETERS(op->base.to_address),"tag");
req=sal_op_build_request(op,"SUBSCRIBE");
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),op->event);
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(belle_sip_header_expires_create(expires)));
if( req ){
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),op->event);
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(belle_sip_header_expires_create(expires)));
}
return sal_op_send_request(op,req);
}

View file

@ -76,6 +76,11 @@ int sal_publish_presence(SalOp *op, const char *from, const char *to, int expire
op->type=SalOpPublish;
req=sal_op_build_request(op,"PUBLISH");
if( req == NULL ){
return -1;
}
if (sal_op_get_contact_address(op)){
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(sal_op_create_contact(op)));
}
@ -101,6 +106,10 @@ int sal_publish(SalOp *op, const char *from, const char *to, const char *eventna
sal_op_publish_fill_cbs(op);
req=sal_op_build_request(op,"PUBLISH");
if( req == NULL ){
return -1;
}
if (sal_op_get_contact_address(op)){
belle_sip_message_add_header(BELLE_SIP_MESSAGE(req),BELLE_SIP_HEADER(sal_op_create_contact(op)));
}

106
coreapi/buffer.c Normal file
View file

@ -0,0 +1,106 @@
/*
linphone
Copyright (C) 2010-2014 Belledonne Communications SARL
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 "linphonecore.h"
#include "private.h"
static void linphone_buffer_destroy(LinphoneBuffer *buffer) {
if (buffer->content) belle_sip_free(buffer->content);
}
BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneBuffer);
BELLE_SIP_INSTANCIATE_VPTR(LinphoneBuffer, belle_sip_object_t,
(belle_sip_object_destroy_t)linphone_buffer_destroy,
NULL, // clone
NULL, // marshal
TRUE
);
LinphoneBuffer * linphone_buffer_new(void) {
LinphoneBuffer *buffer = belle_sip_object_new(LinphoneBuffer);
belle_sip_object_ref(buffer);
return buffer;
}
LinphoneBuffer * linphone_buffer_new_from_data(const uint8_t *data, size_t size) {
LinphoneBuffer *buffer = linphone_buffer_new();
linphone_buffer_set_content(buffer, data, size);
return buffer;
}
LinphoneBuffer * linphone_buffer_new_from_string(const char *data) {
LinphoneBuffer *buffer = linphone_buffer_new();
linphone_buffer_set_string_content(buffer, data);
return buffer;
}
LinphoneBuffer * linphone_buffer_ref(LinphoneBuffer *buffer) {
belle_sip_object_ref(buffer);
return buffer;
}
void linphone_buffer_unref(LinphoneBuffer *buffer) {
belle_sip_object_unref(buffer);
}
void *linphone_buffer_get_user_data(const LinphoneBuffer *buffer) {
return buffer->user_data;
}
void linphone_buffer_set_user_data(LinphoneBuffer *buffer, void *ud) {
buffer->user_data = ud;
}
const uint8_t * linphone_buffer_get_content(const LinphoneBuffer *buffer) {
return buffer->content;
}
void linphone_buffer_set_content(LinphoneBuffer *buffer, const uint8_t *content, size_t size) {
buffer->size = size;
if (buffer->content) belle_sip_free(buffer->content);
buffer->content = belle_sip_malloc(size + 1);
memcpy(buffer->content, content, size);
((char *)buffer->content)[size] = '\0';
}
const char * linphone_buffer_get_string_content(const LinphoneBuffer *buffer) {
return (const char *)buffer->content;
}
void linphone_buffer_set_string_content(LinphoneBuffer *buffer, const char *content) {
buffer->size = strlen(content);
if (buffer->content) belle_sip_free(buffer->content);
buffer->content = (uint8_t *)belle_sip_strdup(content);
}
size_t linphone_buffer_get_size(const LinphoneBuffer *buffer) {
return buffer->size;
}
void linphone_buffer_set_size(LinphoneBuffer *buffer, size_t size) {
buffer->size = size;
}
bool_t linphone_buffer_is_empty(const LinphoneBuffer *buffer) {
return (buffer->size == 0) ? TRUE : FALSE;
}

147
coreapi/buffer.h Normal file
View file

@ -0,0 +1,147 @@
/*
buffer.h
Copyright (C) 2010-2014 Belledonne Communications SARL
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.
*/
#ifndef LINPHONE_BUFFER_H_
#define LINPHONE_BUFFER_H_
#ifdef __cplusplus
extern "C" {
#endif
/**
* @addtogroup misc
* @{
*/
/**
* The LinphoneContent object representing a data buffer.
**/
typedef struct _LinphoneBuffer LinphoneBuffer;
/**
* Create a new empty LinphoneBuffer object.
* @return A new LinphoneBuffer object.
*/
LINPHONE_PUBLIC LinphoneBuffer * linphone_buffer_new(void);
/**
* Create a new LinphoneBuffer object from existing data.
* @param[in] data The initial data to store in the LinphoneBuffer.
* @param[in] size The size of the initial data to stroe in the LinphoneBuffer.
* @return A new LinphoneBuffer object.
*/
LINPHONE_PUBLIC LinphoneBuffer * linphone_buffer_new_from_data(const uint8_t *data, size_t size);
/**
* Create a new LinphoneBuffer object from a string.
* @param[in] data The initial string content of the LinphoneBuffer.
* @return A new LinphoneBuffer object.
*/
LINPHONE_PUBLIC LinphoneBuffer * linphone_buffer_new_from_string(const char *data);
/**
* Acquire a reference to the buffer.
* @param[in] buffer LinphoneBuffer object.
* @return The same LinphoneBuffer object.
**/
LINPHONE_PUBLIC LinphoneBuffer * linphone_buffer_ref(LinphoneBuffer *buffer);
/**
* Release reference to the buffer.
* @param[in] buffer LinphoneBuffer object.
**/
LINPHONE_PUBLIC void linphone_buffer_unref(LinphoneBuffer *buffer);
/**
* Retrieve the user pointer associated with the buffer.
* @param[in] buffer LinphoneBuffer object.
* @return The user pointer associated with the buffer.
**/
LINPHONE_PUBLIC void *linphone_buffer_get_user_data(const LinphoneBuffer *buffer);
/**
* Assign a user pointer to the buffer.
* @param[in] buffer LinphoneBuffer object.
* @param[in] ud The user pointer to associate with the buffer.
**/
LINPHONE_PUBLIC void linphone_buffer_set_user_data(LinphoneBuffer *buffer, void *ud);
/**
* Get the content of the data buffer.
* @param[in] buffer LinphoneBuffer object.
* @return The content of the data buffer.
*/
LINPHONE_PUBLIC const uint8_t * linphone_buffer_get_content(const LinphoneBuffer *buffer);
/**
* Set the content of the data buffer.
* @param[in] buffer LinphoneBuffer object.
* @param[in] content The content of the data buffer.
* @param[in] size The size of the content of the data buffer.
*/
LINPHONE_PUBLIC void linphone_buffer_set_content(LinphoneBuffer *buffer, const uint8_t *content, size_t size);
/**
* Get the string content of the data buffer.
* @param[in] buffer LinphoneBuffer object
* @return The string content of the data buffer.
*/
LINPHONE_PUBLIC const char * linphone_buffer_get_string_content(const LinphoneBuffer *buffer);
/**
* Set the string content of the data buffer.
* @param[in] buffer LinphoneBuffer object.
* @param[in] content The string content of the data buffer.
*/
LINPHONE_PUBLIC void linphone_buffer_set_string_content(LinphoneBuffer *buffer, const char *content);
/**
* Get the size of the content of the data buffer.
* @param[in] buffer LinphoneBuffer object.
* @return The size of the content of the data buffer.
*/
LINPHONE_PUBLIC size_t linphone_buffer_get_size(const LinphoneBuffer *buffer);
/**
* Set the size of the content of the data buffer.
* @param[in] buffer LinphoneBuffer object
* @param[in] size The size of the content of the data buffer.
*/
LINPHONE_PUBLIC void linphone_buffer_set_size(LinphoneBuffer *buffer, size_t size);
/**
* Tell whether the LinphoneBuffer is empty.
* @param[in] buffer LinphoneBuffer object
* @return A boolean value telling whether the LinphoneBuffer is empty or not.
*/
LINPHONE_PUBLIC bool_t linphone_buffer_is_empty(const LinphoneBuffer *buffer);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif /* LINPHONE_CONTENT_H_ */

View file

@ -215,9 +215,9 @@ char * linphone_call_log_to_str(LinphoneCallLog *cl){
status=_("missed");
break;
default:
status="unknown";
status=_("unknown");
}
tmp=ortp_strdup_printf(_("%s at %s\nFrom: %s\nTo: %s\nStatus: %s\nDuration: %i mn %i sec\n"),
tmp=ms_strdup_printf(_("%s at %s\nFrom: %s\nTo: %s\nStatus: %s\nDuration: %i mn %i sec\n"),
(cl->dir==LinphoneCallIncoming) ? _("Incoming call") : _("Outgoing call"),
cl->start_date,
from,

View file

@ -96,7 +96,23 @@ static void prepare_early_media_forking(LinphoneCall *call){
if (call->videostream){
rtp_session_set_symmetric_rtp(call->videostream->ms.sessions.rtp_session,FALSE);
}
}
void linphone_call_update_frozen_payloads(LinphoneCall *call, SalMediaDescription *result_desc){
SalMediaDescription *local=call->localdesc;
int i;
for(i=0;i<result_desc->nb_streams;++i){
MSList *elem;
for (elem=result_desc->streams[i].payloads;elem!=NULL;elem=elem->next){
PayloadType *pt=(PayloadType*)elem->data;
if (is_payload_type_number_available(local->streams[i].already_assigned_payloads, payload_type_get_number(pt), NULL)){
/*new codec, needs to be added to the list*/
local->streams[i].already_assigned_payloads=ms_list_append(local->streams[i].already_assigned_payloads, payload_type_clone(pt));
ms_message("LinphoneCall[%p] : payload type %i %s/%i fmtp=%s added to frozen list.",
call, payload_type_get_number(pt), pt->mime_type, pt->clock_rate, pt->recv_fmtp ? pt->recv_fmtp : NULL);
}
}
}
}
void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMediaDescription *new_md){
@ -181,6 +197,7 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia
if (call->state==LinphoneCallPausing && call->paused_by_app && ms_list_size(lc->calls)==1){
linphone_core_play_named_tone(lc,LinphoneToneCallOnHold);
}
linphone_call_update_frozen_payloads(call, new_md);
end:
if (oldmd)
sal_media_description_unref(oldmd);
@ -772,8 +789,11 @@ static void call_failure(SalOp *op){
char* url = linphone_address_as_string(redirection_to);
ms_warning("Redirecting call [%p] to %s",call, url);
ms_free(url);
linphone_call_create_op(call);
linphone_core_start_invite(lc, call, redirection_to);
if( call->log->to != NULL ) {
linphone_address_unref(call->log->to);
}
call->log->to = linphone_address_ref(redirection_to);
linphone_core_restart_invite(lc, call);
return;
}
}

View file

@ -95,7 +95,7 @@ void linphone_chat_message_cbs_set_user_data(LinphoneChatMessageCbs *cbs, void *
* @param[in] cbs LinphoneChatMessageCbs object.
* @return The current message state changed callback.
*/
LinphoneChatMessageMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs) {
LinphoneChatMessageCbsMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs) {
return cbs->msg_state_changed;
}
@ -104,7 +104,7 @@ LinphoneChatMessageMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_cha
* @param[in] cbs LinphoneChatMessageCbs object.
* @param[in] cb The message state changed callback to be used.
*/
void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageMsgStateChangedCb cb) {
void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsMsgStateChangedCb cb) {
cbs->msg_state_changed = cb;
}
@ -113,7 +113,7 @@ void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs
* @param[in] cbs LinphoneChatMessageCbs object.
* @return The current file transfer receive callback.
*/
LinphoneChatMessageFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs) {
LinphoneChatMessageCbsFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs) {
return cbs->file_transfer_recv;
}
@ -122,7 +122,7 @@ LinphoneChatMessageFileTransferRecvCb linphone_chat_message_cbs_get_file_transfe
* @param[in] cbs LinphoneChatMessageCbs object.
* @param[in] cb The file transfer receive callback to be used.
*/
void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferRecvCb cb) {
void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferRecvCb cb) {
cbs->file_transfer_recv = cb;
}
@ -131,7 +131,7 @@ void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cb
* @param[in] cbs LinphoneChatMessageCbs object.
* @return The current file transfer send callback.
*/
LinphoneChatMessageFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs) {
LinphoneChatMessageCbsFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs) {
return cbs->file_transfer_send;
}
@ -140,7 +140,7 @@ LinphoneChatMessageFileTransferSendCb linphone_chat_message_cbs_get_file_transfe
* @param[in] cbs LinphoneChatMessageCbs object.
* @param[in] cb The file transfer send callback to be used.
*/
void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferSendCb cb) {
void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferSendCb cb) {
cbs->file_transfer_send = cb;
}
@ -149,7 +149,7 @@ void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cb
* @param[in] cbs LinphoneChatMessageCbs object.
* @return The current file transfer progress indication callback.
*/
LinphoneChatMessageFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs) {
LinphoneChatMessageCbsFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs) {
return cbs->file_transfer_progress_indication;
}
@ -158,7 +158,7 @@ LinphoneChatMessageFileTransferProgressIndicationCb linphone_chat_message_cbs_ge
* @param[in] cbs LinphoneChatMessageCbs object.
* @param[in] cb The file transfer progress indication callback to be used.
*/
void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferProgressIndicationCb cb) {
void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferProgressIndicationCb cb) {
cbs->file_transfer_progress_indication = cb;
}
@ -246,7 +246,13 @@ static int linphone_chat_message_file_transfer_on_send_body(belle_sip_user_body_
if (offset<linphone_content_get_size(chatMsg->file_transfer_information)){
/* get data from call back */
if (linphone_chat_message_cbs_get_file_transfer_send(chatMsg->callbacks)) {
linphone_chat_message_cbs_get_file_transfer_send(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, buf, size);
LinphoneBuffer *lb = linphone_chat_message_cbs_get_file_transfer_send(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, offset, *size);
if (lb == NULL) *size = 0;
else {
*size = linphone_buffer_get_size(lb);
memcpy(buffer, linphone_buffer_get_content(lb), *size);
linphone_buffer_unref(lb);
}
} else {
/* Legacy */
linphone_core_notify_file_transfer_send(lc, chatMsg, chatMsg->file_transfer_information, buf, size);
@ -287,6 +293,11 @@ static void linphone_chat_message_process_response_from_post_file(void *data, co
/* create a user body handler to take care of the file and add the content disposition and content-type headers */
if (msg->file_transfer_filepath != NULL) {
first_part_bh=(belle_sip_body_handler_t *)belle_sip_file_body_handler_new(msg->file_transfer_filepath,NULL,msg);
} else if (linphone_content_get_buffer(msg->file_transfer_information) != NULL) {
first_part_bh=(belle_sip_body_handler_t *)belle_sip_memory_body_handler_new_from_buffer(
linphone_content_get_buffer(msg->file_transfer_information),
linphone_content_get_size(msg->file_transfer_information),
NULL,msg);
} else {
first_part_bh=(belle_sip_body_handler_t *)belle_sip_user_body_handler_new(linphone_content_get_size(msg->file_transfer_information),NULL,NULL,linphone_chat_message_file_transfer_on_send_body,msg);
}
@ -473,7 +484,7 @@ LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *
* Get a chat room whose peer is the supplied address. If it does not exist yet, it will be created.
* @param lc the linphone core
* @param addr a linphone address.
* @returns #LinphoneChatRoom where messaging can take place.
* @return #LinphoneChatRoom where messaging can take place.
**/
LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAddress *addr){
LinphoneChatRoom *ret = _linphone_core_get_chat_room(lc, addr);
@ -487,7 +498,7 @@ LinphoneChatRoom *linphone_core_get_chat_room(LinphoneCore *lc, const LinphoneAd
* Get a chat room for messaging from a sip uri like sip:joe@sip.linphone.org. If it does not exist yet, it will be created.
* @param lc The linphone core
* @param to The destination address for messages.
* @returns #LinphoneChatRoom where messaging can take place.
* @return #LinphoneChatRoom where messaging can take place.
**/
LinphoneChatRoom * linphone_core_get_chat_room_from_uri(LinphoneCore *lc, const char *to) {
return _linphone_core_get_or_create_chat_room(lc, to);
@ -578,8 +589,13 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM
belle_http_request_listener_t *l;
belle_generic_uri_t *uri;
belle_http_request_t *req;
const char *transfer_server = linphone_core_get_file_transfer_server(cr->lc);
uri=belle_generic_uri_parse(linphone_core_get_file_transfer_server(cr->lc));
if (transfer_server == NULL) {
ms_warning("Cannot send file transfer message: no file transfer server configured.");
return;
}
uri=belle_generic_uri_parse(transfer_server);
req=belle_http_request_create("POST",
uri,
@ -1205,7 +1221,9 @@ static void on_recv_body(belle_sip_user_body_handler_t *bh, belle_sip_message_t
return;
}
if (linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)) {
linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, (char *)buffer, size);
LinphoneBuffer *lb = linphone_buffer_new_from_data(buffer, size);
linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, lb);
linphone_buffer_unref(lb);
} else {
/* Legacy: call back given by application level */
linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, (char *)buffer, size);
@ -1262,10 +1280,12 @@ static void linphone_chat_process_response_headers_from_get_file(void *data, con
(belle_sip_body_handler_t*)belle_sip_user_body_handler_new(body_size, linphone_chat_message_file_transfer_on_progress,on_recv_body,NULL,message)
);
} else {
belle_sip_message_set_body_handler(
(belle_sip_message_t *)event->response,
(belle_sip_body_handler_t *)belle_sip_file_body_handler_new(message->file_transfer_filepath, linphone_chat_message_file_transfer_on_progress, message)
);
belle_sip_body_handler_t *bh = (belle_sip_body_handler_t *)belle_sip_file_body_handler_new(message->file_transfer_filepath, linphone_chat_message_file_transfer_on_progress, message);
if (belle_sip_body_handler_get_size(bh) == 0) {
/* If the size of the body has not been initialized from the file stat, use the one from the file_transfer_information. */
belle_sip_body_handler_set_size(bh, body_size);
}
belle_sip_message_set_body_handler((belle_sip_message_t *)event->response, bh);
}
}
}
@ -1279,7 +1299,9 @@ static void linphone_chat_process_response_from_get_file(void *data, const belle
LinphoneCore *lc = chatMsg->chat_room->lc;
/* file downloaded succesfully, call again the callback with size at zero */
if (linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)) {
linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, NULL, 0);
LinphoneBuffer *lb = linphone_buffer_new();
linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, lb);
linphone_buffer_unref(lb);
} else {
linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, NULL, 0);
}
@ -1612,6 +1634,7 @@ LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneCha
msg->callbacks=linphone_chat_message_cbs_new();
msg->chat_room=(LinphoneChatRoom*)cr;
msg->message = NULL;
msg->is_read=TRUE;
msg->file_transfer_information = linphone_content_copy(initial_content);
msg->dir=LinphoneChatMessageOutgoing;
linphone_chat_message_set_to(msg, linphone_chat_room_get_peer_address(cr));

View file

@ -157,7 +157,7 @@ static void add_local_endpoint(LinphoneConference *conf,LinphoneCore *lc){
/**
* Returns the sound volume (mic input) of the local participant of the conference.
* @param lc the linphone core
* @returns the measured input volume expressed in dbm0.
* @return the measured input volume expressed in dbm0.
**/
float linphone_core_get_conference_local_input_volume(LinphoneCore *lc){
LinphoneConference *conf=&lc->conf_ctx;
@ -180,7 +180,7 @@ float linphone_core_get_conference_local_input_volume(LinphoneCore *lc){
* If the local user was actively part of the call (ie not in paused state), then the local user is automatically entered into the conference.
* If the call was in paused state, then it is automatically resumed when entering into the conference.
*
* @returns 0 if successful, -1 otherwise.
* @return 0 if successful, -1 otherwise.
**/
int linphone_core_add_to_conference(LinphoneCore *lc, LinphoneCall *call){
LinphoneConference *conf=&lc->conf_ctx;
@ -289,7 +289,7 @@ static int convert_conference_to_call(LinphoneCore *lc){
* In other words, unless linphone_core_leave_conference() is explicitely called, the last remote participant of a conference is automatically
* put in a simple call in running state.
*
* @returns 0 if successful, -1 otherwise.
* @return 0 if successful, -1 otherwise.
**/
int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call){
int err;
@ -314,7 +314,7 @@ int linphone_core_remove_from_conference(LinphoneCore *lc, LinphoneCall *call){
/**
* Indicates whether the local participant is part of the conference.
* @param lc the linphone core
* @returns TRUE if the local participant is in the conference, FALSE otherwise.
* @return TRUE if the local participant is in the conference, FALSE otherwise.
**/
bool_t linphone_core_is_in_conference(const LinphoneCore *lc){
return lc->conf_ctx.local_participant!=NULL;
@ -324,7 +324,7 @@ bool_t linphone_core_is_in_conference(const LinphoneCore *lc){
* Moves the local participant out of the conference.
* @param lc the linphone core
* When the local participant is out of the conference, the remote participants can continue to talk normally.
* @returns 0 if successful, -1 otherwise.
* @return 0 if successful, -1 otherwise.
**/
int linphone_core_leave_conference(LinphoneCore *lc){
LinphoneConference *conf=&lc->conf_ctx;
@ -342,7 +342,7 @@ int linphone_core_leave_conference(LinphoneCore *lc){
* However, by calling linphone_core_leave_conference() and linphone_core_enter_conference() the application can decide to temporarily
* move out and in the local participant from the conference.
*
* @returns 0 if successful, -1 otherwise
* @return 0 if successful, -1 otherwise
**/
int linphone_core_enter_conference(LinphoneCore *lc){
LinphoneConference *conf;
@ -363,7 +363,7 @@ int linphone_core_enter_conference(LinphoneCore *lc){
*
* Merge all established calls (either in LinphoneCallStreamsRunning or LinphoneCallPaused) into a conference.
*
* @returns 0 if successful, -1 otherwise
* @return 0 if successful, -1 otherwise
**/
int linphone_core_add_all_to_conference(LinphoneCore *lc) {
MSList *calls=lc->calls;
@ -384,7 +384,7 @@ int linphone_core_add_all_to_conference(LinphoneCore *lc) {
*
* All the calls that were merged to the conference are terminated, and the conference resources are destroyed.
*
* @returns 0 if successful, -1 otherwise
* @return 0 if successful, -1 otherwise
**/
int linphone_core_terminate_conference(LinphoneCore *lc) {
MSList *calls=lc->calls;
@ -408,7 +408,7 @@ int linphone_core_terminate_conference(LinphoneCore *lc) {
* Typically, after merging two calls into the conference, there is total of 3 participants:
* the local participant (or local user), and two remote participants that were the destinations of the two previously establised calls.
*
* @returns the number of participants to the conference
* @return the number of participants to the conference
**/
int linphone_core_get_conference_size(LinphoneCore *lc) {
LinphoneConference *conf=&lc->conf_ctx;

View file

@ -115,7 +115,7 @@ void linphone_content_set_buffer(LinphoneContent *content, const void *buffer, s
((char *)content->lcp.data)[size] = '\0';
}
char * linphone_content_get_string_buffer(const LinphoneContent *content) {
const char * linphone_content_get_string_buffer(const LinphoneContent *content) {
return (char *)content->lcp.data;
}

View file

@ -165,7 +165,7 @@ LINPHONE_PUBLIC void linphone_content_set_buffer(LinphoneContent *content, const
* @param[in] content LinphoneContent object
* @return The string content data buffer.
*/
LINPHONE_PUBLIC char * linphone_content_get_string_buffer(const LinphoneContent *content);
LINPHONE_PUBLIC const char * linphone_content_get_string_buffer(const LinphoneContent *content);
/**
* Set the string content data buffer.

View file

@ -63,56 +63,37 @@ static void file_transfer_progress_indication(LinphoneChatMessage *message, cons
/**
* function invoked when a file transfer is received.
**/
static void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size){
static void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const LinphoneBuffer *buffer){
FILE* file=NULL;
if (!linphone_chat_message_get_user_data(message)) {
/*first chunk, creating file*/
file = fopen("receive_file.dump","wb");
linphone_chat_message_set_user_data(message,(void*)file); /*store fd for next chunks*/
} else {
/*next chunk*/
file = (FILE*)linphone_chat_message_get_user_data(message);
}
if (size==0) {
printf("File transfert completed\n");
linphone_chat_room_destroy(linphone_chat_message_get_chat_room(message));
linphone_chat_message_destroy(message);
fclose(file);
running=FALSE;
} else { /* store content on a file*/
if (fwrite(buff,size,1,file)==-1){
ms_warning("file_transfer_received() write failed: %s",strerror(errno));
}
file = (FILE*)linphone_chat_message_get_user_data(message);
if (linphone_buffer_is_empty(buffer)) {
printf("File transfert completed\n");
linphone_chat_room_destroy(linphone_chat_message_get_chat_room(message));
linphone_chat_message_destroy(message);
fclose(file);
running=FALSE;
} else { /* store content on a file*/
if (fwrite(linphone_buffer_get_content(buffer),linphone_buffer_get_size(buffer),1,file)==-1){
ms_warning("file_transfer_received() write failed: %s",strerror(errno));
}
}
}
char big_file [128000];
/*
* function called when the file transfer is initiated. file content should be feed into object LinphoneContent
* */
static void file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size){
int offset=-1;
if (!linphone_chat_message_get_user_data(message)) {
/*first chunk*/
offset=0;
} else {
/*subsequent chunk*/
offset = (int)((long)(linphone_chat_message_get_user_data(message))&0x00000000FFFFFFFF);
}
*size = MIN(*size,sizeof(big_file)-offset); /*updating content->size with minimun between remaining data and requested size*/
if (*size==0) {
/*end of file*/
return;
}
memcpy(buff,big_file+offset,*size);
/*store offset for next chunk*/
linphone_chat_message_set_user_data(message,(void*)(offset+*size));
static LinphoneBuffer * file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size){
size_t size_to_send = MIN(size, sizeof(big_file) - offset);
if (size == 0) return linphone_buffer_new(); /*end of file*/
return linphone_buffer_new_from_data((uint8_t *)big_file + offset, size_to_send);
}
/*

View file

@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.LogCollectionUploadState;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCore.RemoteProvisioningState;
import org.linphone.core.LinphoneCoreException;
@ -322,4 +323,17 @@ public class TutorialBuddyStatus implements LinphoneListener {
// TODO Auto-generated method stub
return 0;
}
@Override
public void uploadProgressIndication(LinphoneCore lc, int offset, int total) {
// TODO Auto-generated method stub
}
@Override
public void uploadStateChanged(LinphoneCore lc,
LogCollectionUploadState state, String info) {
// TODO Auto-generated method stub
}
}

View file

@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.LogCollectionUploadState;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCore.RemoteProvisioningState;
import org.linphone.core.LinphoneCoreException;
@ -241,5 +242,18 @@ public class TutorialChatRoom implements LinphoneListener, LinphoneChatMessage.S
return 0;
}
@Override
public void uploadProgressIndication(LinphoneCore lc, int offset, int total) {
// TODO Auto-generated method stub
}
@Override
public void uploadStateChanged(LinphoneCore lc,
LogCollectionUploadState state, String info) {
// TODO Auto-generated method stub
}
}

View file

@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.LogCollectionUploadState;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCore.RemoteProvisioningState;
import org.linphone.core.LinphoneCoreException;
@ -243,5 +244,18 @@ public class TutorialHelloWorld implements LinphoneListener {
return 0;
}
@Override
public void uploadProgressIndication(LinphoneCore lc, int offset, int total) {
// TODO Auto-generated method stub
}
@Override
public void uploadStateChanged(LinphoneCore lc,
LogCollectionUploadState state, String info) {
// TODO Auto-generated method stub
}
}

View file

@ -30,6 +30,7 @@ import org.linphone.core.LinphoneContent;
import org.linphone.core.LinphoneCore;
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
import org.linphone.core.LinphoneCore.GlobalState;
import org.linphone.core.LinphoneCore.LogCollectionUploadState;
import org.linphone.core.LinphoneCore.RegistrationState;
import org.linphone.core.LinphoneCore.RemoteProvisioningState;
import org.linphone.core.LinphoneCoreException;
@ -274,6 +275,16 @@ public class TutorialRegistration implements LinphoneListener {
return 0;
}
@Override
public void uploadProgressIndication(LinphoneCore lc, int offset, int total) {
// TODO Auto-generated method stub
}
@Override
public void uploadStateChanged(LinphoneCore lc,
LogCollectionUploadState state, String info) {
// TODO Auto-generated method stub
}
}

View file

@ -38,6 +38,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "mediastreamer2/mssndcard.h"
static const char EC_STATE_STORE[] = ".linphone.ecstate";
#define EC_STATE_MAX_LEN 1048576 // 1Mo
static void linphone_call_stats_uninit(LinphoneCallStats *stats);
@ -227,35 +228,154 @@ void linphone_call_set_authentication_token_verified(LinphoneCall *call, bool_t
propagate_encryption_changed(call);
}
static MSList *make_codec_list(LinphoneCore *lc, const MSList *codecs, int bandwidth_limit,int* max_sample_rate, int nb_codecs_limit){
MSList *l=NULL;
static int get_max_codec_sample_rate(const MSList *codecs){
int max_sample_rate=0;
const MSList *it;
int nb = 0;
if (max_sample_rate) *max_sample_rate=0;
for(it=codecs;it!=NULL;it=it->next){
PayloadType *pt=(PayloadType*)it->data;
if (pt->flags & PAYLOAD_TYPE_ENABLED){
int sample_rate = payload_type_get_rate(pt);
int sample_rate;
if( strcasecmp("G722",pt->mime_type) == 0 ){
/* G722 spec says 8000 but the codec actually requires 16000 */
sample_rate = 16000;
}else sample_rate=pt->clock_rate;
if (sample_rate>max_sample_rate) max_sample_rate=sample_rate;
}
return max_sample_rate;
}
if( strcasecmp("G722",pt->mime_type) == 0 ){
/* G722 spec says 8000 but the codec actually requires 16000 */
ms_debug("Correcting sample rate for G722");
sample_rate = 16000;
}
if (bandwidth_limit>0 && !linphone_core_is_payload_type_usable_for_bandwidth(lc,pt,bandwidth_limit)){
ms_message("Codec %s/%i eliminated because of audio bandwidth constraint of %i kbit/s",
pt->mime_type,pt->clock_rate,bandwidth_limit);
continue;
}
if (linphone_core_check_payload_type_usability(lc,pt)){
l=ms_list_append(l,payload_type_clone(pt));
nb++;
if (max_sample_rate && sample_rate>*max_sample_rate) *max_sample_rate=sample_rate;
static int find_payload_type_number(const MSList *assigned, const PayloadType *pt){
const MSList *elem;
const PayloadType *candidate=NULL;
for(elem=assigned;elem!=NULL;elem=elem->next){
const PayloadType *it=(const PayloadType*)elem->data;
if ((strcasecmp(pt->mime_type, payload_type_get_mime(it)) == 0)
&& (it->clock_rate==pt->clock_rate)
&& (it->channels==pt->channels || pt->channels<=0)) {
candidate=it;
if ((it->recv_fmtp!=NULL && pt->recv_fmtp!=NULL && strcasecmp(it->recv_fmtp, pt->recv_fmtp)==0)
|| (it->recv_fmtp==NULL && pt->recv_fmtp==NULL)){
break;/*exact match*/
}
}
if ((nb_codecs_limit > 0) && (nb >= nb_codecs_limit)) break;
}
return candidate ? payload_type_get_number(candidate) : -1;
}
bool_t is_payload_type_number_available(const MSList *l, int number, const PayloadType *ignore){
const MSList *elem;
for (elem=l; elem!=NULL; elem=elem->next){
const PayloadType *pt=(PayloadType*)elem->data;
if (pt!=ignore && payload_type_get_number(pt)==number) return FALSE;
}
return TRUE;
}
static void linphone_core_assign_payload_type_numbers(LinphoneCore *lc, MSList *codecs){
MSList *elem;
int dyn_number=lc->codecs_conf.dyn_pt;
for (elem=codecs; elem!=NULL; elem=elem->next){
PayloadType *pt=(PayloadType*)elem->data;
int number=payload_type_get_number(pt);
/*check if number is duplicated: it could be the case if the remote forced us to use a mapping with a previous offer*/
if (number!=-1 && !(pt->flags & PAYLOAD_TYPE_FROZEN_NUMBER)){
if (!is_payload_type_number_available(codecs, number, pt)){
ms_message("Reassigning payload type %i %s/%i because already offered.", number, pt->mime_type, pt->clock_rate);
number=-1; /*need to be re-assigned*/
}
}
if (number==-1){
while(dyn_number<127){
if (is_payload_type_number_available(codecs, dyn_number, NULL)){
payload_type_set_number(pt, dyn_number);
dyn_number++;
break;
}
dyn_number++;
}
if (dyn_number==127){
ms_error("Too many payload types configured ! codec %s/%i is disabled.", pt->mime_type, pt->clock_rate);
payload_type_set_enable(pt, FALSE);
}
}
}
}
static bool_t has_telephone_event_at_rate(const MSList *tev, int rate){
const MSList *it;
for(it=tev;it!=NULL;it=it->next){
const PayloadType *pt=(PayloadType*)it->data;
if (pt->clock_rate==rate) return TRUE;
}
return FALSE;
}
static MSList * create_telephone_events(LinphoneCore *lc, const MSList *codecs){
const MSList *it;
MSList *ret=NULL;
for(it=codecs;it!=NULL;it=it->next){
const PayloadType *pt=(PayloadType*)it->data;
if (!has_telephone_event_at_rate(ret,pt->clock_rate)){
PayloadType *tev=payload_type_clone(&payload_type_telephone_event);
tev->clock_rate=pt->clock_rate;
/*let it choose the number dynamically as for normal codecs*/
payload_type_set_number(tev, -1);
if (ret==NULL){
/*But for first telephone-event, prefer the number that was configured in the core*/
if (is_payload_type_number_available(codecs, lc->codecs_conf.telephone_event_pt, NULL)){
payload_type_set_number(tev, lc->codecs_conf.telephone_event_pt);
}
}
ret=ms_list_append(ret,tev);
}
}
return ret;
}
typedef struct _CodecConstraints{
int bandwidth_limit;
int max_codecs;
MSList *previously_used;
}CodecConstraints;
static MSList *make_codec_list(LinphoneCore *lc, CodecConstraints * hints, const MSList *codecs){
MSList *l=NULL;
MSList *tevs=NULL;
const MSList *it;
int nb = 0;
for(it=codecs;it!=NULL;it=it->next){
PayloadType *pt=(PayloadType*)it->data;
int num;
if (!(pt->flags & PAYLOAD_TYPE_ENABLED))
continue;
if (hints->bandwidth_limit>0 && !linphone_core_is_payload_type_usable_for_bandwidth(lc,pt,hints->bandwidth_limit)){
ms_message("Codec %s/%i eliminated because of audio bandwidth constraint of %i kbit/s",
pt->mime_type,pt->clock_rate,hints->bandwidth_limit);
continue;
}
if (!linphone_core_check_payload_type_usability(lc,pt)){
continue;
}
pt=payload_type_clone(pt);
/*look for a previously assigned number for this codec*/
num=find_payload_type_number(hints->previously_used, pt);
if (num!=-1){
payload_type_set_number(pt,num);
payload_type_set_flag(pt, PAYLOAD_TYPE_FROZEN_NUMBER);
}
l=ms_list_append(l, pt);
nb++;
if ((hints->max_codecs > 0) && (nb >= hints->max_codecs)) break;
}
tevs=create_telephone_events(lc,l);
l=ms_list_concat(l,tevs);
linphone_core_assign_payload_type_numbers(lc, l);
return l;
}
@ -394,9 +514,16 @@ void linphone_call_update_local_media_description_from_ice_or_upnp(LinphoneCall
#endif //BUILD_UPNP
}
static void transfer_already_assigned_payload_types(SalMediaDescription *old, SalMediaDescription *md){
int i;
for(i=0;i<old->nb_streams;++i){
md->streams[i].already_assigned_payloads=old->streams[i].already_assigned_payloads;
old->streams[i].already_assigned_payloads=NULL;
}
}
void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call){
MSList *l;
PayloadType *pt;
SalMediaDescription *old_md=call->localdesc;
int i;
int nb_active_streams = 0;
@ -405,6 +532,7 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
LinphoneAddress *addr;
char* local_ip=call->localip;
const char *subject=linphone_call_params_get_session_name(call->params);
CodecConstraints codec_hints={0};
linphone_core_adapt_to_network(lc,call->ping_time,call->params);
@ -438,9 +566,11 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
md->streams[0].ptime=call->params->down_ptime;
else
md->streams[0].ptime=linphone_core_get_download_ptime(lc);
l=make_codec_list(lc,lc->codecs_conf.audio_codecs,call->params->audio_bw,&md->streams[0].max_rate,-1);
pt=payload_type_clone(rtp_profile_get_payload_from_mime(lc->default_profile,"telephone-event"));
l=ms_list_append(l,pt);
codec_hints.bandwidth_limit=call->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, lc->codecs_conf.audio_codecs);
md->streams[0].max_rate=get_max_codec_sample_rate(l);
md->streams[0].payloads=l;
nb_active_streams++;
@ -452,7 +582,10 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
md->streams[1].rtcp_port=call->media_ports[1].rtcp_port;
md->streams[1].proto=md->streams[0].proto;
md->streams[1].type=SalVideo;
l=make_codec_list(lc,lc->codecs_conf.video_codecs,0,NULL,-1);
codec_hints.bandwidth_limit=0;
codec_hints.max_codecs=-1;
codec_hints.previously_used=old_md ? old_md->streams[1].already_assigned_payloads : NULL;
l=make_codec_list(lc, &codec_hints, lc->codecs_conf.video_codecs);
md->streams[1].payloads=l;
nb_active_streams++;
}
@ -467,7 +600,10 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
md->streams[i].proto = call->biggestdesc->streams[i].proto;
md->streams[i].type = call->biggestdesc->streams[i].type;
md->streams[i].dir = SalStreamInactive;
l = make_codec_list(lc, lc->codecs_conf.video_codecs, 0, NULL, 1);
codec_hints.bandwidth_limit=0;
codec_hints.max_codecs=1;
codec_hints.previously_used=NULL;
l = make_codec_list(lc, &codec_hints, lc->codecs_conf.video_codecs);
md->streams[i].payloads = l;
}
@ -480,6 +616,7 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
linphone_call_update_local_media_description_from_ice_or_upnp(call);
linphone_address_destroy(addr);
if (old_md){
transfer_already_assigned_payload_types(old_md,md);
call->localdesc_changed=sal_media_description_equals(md,old_md);
sal_media_description_unref(old_md);
}
@ -744,7 +881,7 @@ void linphone_call_set_compatible_incoming_call_parameters(LinphoneCall *call, c
call->params->avpf_rr_interval = linphone_core_get_avpf_rr_interval(call->core)*1000;
}
}
if ((sal_media_description_has_srtp(md) == TRUE) && (media_stream_srtp_supported() == TRUE)) {
if ((sal_media_description_has_srtp(md) == TRUE) && (ms_srtp_supported() == TRUE)) {
call->params->media_encryption = LinphoneMediaEncryptionSRTP;
}
}
@ -1018,6 +1155,7 @@ void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const
if (cstate==LinphoneCallReleased){
linphone_call_set_released(call);
}
linphone_core_soundcard_hint_check(lc);
}
}
@ -1548,6 +1686,8 @@ void linphone_call_init_audio_stream(LinphoneCall *call){
AudioStream *audiostream;
const char *location;
int dscp;
RtpTransport *meta_rtp=NULL;
RtpTransport *meta_rtcp=NULL;
if (call->audiostream != NULL) return;
if (call->sessions[0].rtp_session==NULL){
@ -1580,13 +1720,15 @@ void linphone_call_init_audio_stream(LinphoneCall *call){
audio_stream_enable_gain_control(audiostream,TRUE);
if (linphone_core_echo_cancellation_enabled(lc)){
int len,delay,framesize;
char *statestr=lp_config_read_relative_file(lc->config, EC_STATE_STORE);
len=lp_config_get_int(lc->config,"sound","ec_tail_len",0);
delay=lp_config_get_int(lc->config,"sound","ec_delay",0);
framesize=lp_config_get_int(lc->config,"sound","ec_framesize",0);
audio_stream_set_echo_canceller_params(audiostream,len,delay,framesize);
if (statestr && audiostream->ec){
ms_filter_call_method(audiostream->ec,MS_ECHO_CANCELLER_SET_STATE_STRING,(void*)statestr);
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) {
ms_filter_call_method(audiostream->ec, MS_ECHO_CANCELLER_SET_STATE_STRING, statestr);
}
ms_free(statestr);
}
}
@ -1597,12 +1739,11 @@ void linphone_call_init_audio_stream(LinphoneCall *call){
}
audio_stream_set_features(audiostream,linphone_core_get_audio_features(lc));
if (lc->rtptf){
rtp_session_get_transports(audiostream->ms.sessions.rtp_session,&meta_rtp,&meta_rtcp);
if (lc->rtptf && (meta_rtp==NULL && meta_rtcp==NULL)){
/*the transport just need to be created once, then they are kept into the RtpSession, which is the same for the entire call duration.*/
RtpTransport *artp=lc->rtptf->audio_rtp_func(lc->rtptf->audio_rtp_func_data, call->media_ports[0].rtp_port);
RtpTransport *artcp=lc->rtptf->audio_rtcp_func(lc->rtptf->audio_rtcp_func_data, call->media_ports[0].rtcp_port);
RtpTransport *meta_rtp;
RtpTransport *meta_rtcp;
meta_rtp_transport_new(&meta_rtp,TRUE,artp, 0);
meta_rtp_transport_new(&meta_rtcp,FALSE,artcp, 0);
rtp_session_set_transports(audiostream->ms.sessions.rtp_session,meta_rtp,meta_rtcp);
@ -1617,6 +1758,8 @@ void linphone_call_init_audio_stream(LinphoneCall *call){
void linphone_call_init_video_stream(LinphoneCall *call){
#ifdef VIDEO_ENABLED
LinphoneCore *lc=call->core;
RtpTransport *meta_rtp=NULL;
RtpTransport *meta_rtcp=NULL;
if (call->videostream == NULL){
int video_recv_buf_size=lp_config_get_int(lc->config,"video","recv_buf_size",0);
@ -1640,11 +1783,11 @@ void linphone_call_init_video_stream(LinphoneCall *call){
if (display_filter != NULL)
video_stream_set_display_filter_name(call->videostream,display_filter);
video_stream_set_event_callback(call->videostream,video_stream_event_cb, call);
if (lc->rtptf){
rtp_session_get_transports(call->videostream->ms.sessions.rtp_session,&meta_rtp,&meta_rtcp);
if (lc->rtptf && (meta_rtp==NULL && meta_rtcp==NULL)){
RtpTransport *vrtp=lc->rtptf->video_rtp_func(lc->rtptf->video_rtp_func_data, call->media_ports[1].rtp_port);
RtpTransport *vrtcp=lc->rtptf->video_rtcp_func(lc->rtptf->video_rtcp_func_data, call->media_ports[1].rtcp_port);
RtpTransport *meta_rtp;
RtpTransport *meta_rtcp;
meta_rtp_transport_new(&meta_rtp,TRUE,vrtp, 0);
meta_rtp_transport_new(&meta_rtcp,FALSE,vrtcp, 0);
rtp_session_set_transports(call->videostream->ms.sessions.rtp_session,meta_rtp,meta_rtcp);
@ -2026,8 +2169,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, const char *cna
crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, stream->crypto_local_tag);
if (crypto_idx >= 0) {
media_stream_set_srtp_recv_key(&call->audiostream->ms,stream->crypto[0].algo,stream->crypto[0].master_key, TRUE);
media_stream_set_srtp_send_key(&call->audiostream->ms,stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE);
media_stream_set_srtp_recv_key_b64(&call->audiostream->ms,stream->crypto[0].algo,stream->crypto[0].master_key);
media_stream_set_srtp_send_key_b64(&call->audiostream->ms,stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key);
} else {
ms_warning("Failed to find local crypto algo with tag: %d", stream->crypto_local_tag);
}
@ -2148,8 +2291,8 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna
if (sal_stream_description_has_srtp(vstream) == TRUE) {
int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, vstream->crypto_local_tag);
if (crypto_idx >= 0) {
media_stream_set_srtp_recv_key(&call->videostream->ms,vstream->crypto[0].algo,vstream->crypto[0].master_key, TRUE);
media_stream_set_srtp_send_key(&call->videostream->ms,vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE);
media_stream_set_srtp_recv_key_b64(&call->videostream->ms,vstream->crypto[0].algo,vstream->crypto[0].master_key);
media_stream_set_srtp_send_key_b64(&call->videostream->ms,vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key);
}
}
configure_rtp_session_for_rtcp_xr(lc, call, SalVideo);
@ -2269,9 +2412,9 @@ static bool_t update_stream_crypto_params(LinphoneCall *call, const SalStreamDes
int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, new_stream->crypto_local_tag);
if (crypto_idx >= 0) {
if (call->localdesc_changed & SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED)
media_stream_set_srtp_send_key(ms,new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE);
media_stream_set_srtp_send_key_b64(ms,new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key);
if (strcmp(old_stream->crypto[0].master_key,new_stream->crypto[0].master_key)!=0){
media_stream_set_srtp_recv_key(ms,new_stream->crypto[0].algo,new_stream->crypto[0].master_key,TRUE);
media_stream_set_srtp_recv_key_b64(ms,new_stream->crypto[0].algo,new_stream->crypto[0].master_key);
}
return TRUE;
} else {
@ -2504,7 +2647,7 @@ float linphone_call_get_record_volume(LinphoneCall *call){
* 1-2 = very poor quality <br>
* 0-1 = can't be worse, mostly unusable <br>
*
* @returns The function returns -1 if no quality measurement is available, for example if no
* @return The function returns -1 if no quality measurement is available, for example if no
* active audio stream exist. Otherwise it returns the quality rating.
**/
float linphone_call_get_current_quality(LinphoneCall *call){
@ -2778,17 +2921,31 @@ void linphone_call_stop_recording(LinphoneCall *call){
**/
static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *vs){
call->stats[LINPHONE_CALL_STATS_AUDIO].download_bandwidth=(as!=NULL) ? (media_stream_get_down_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_AUDIO].upload_bandwidth=(as!=NULL) ? (media_stream_get_up_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].download_bandwidth=(vs!=NULL) ? (media_stream_get_down_bw(vs)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].upload_bandwidth=(vs!=NULL) ? (media_stream_get_up_bw(vs)*1e-3) : 0;
ms_message("bandwidth usage for call [%p]: audio=[d=%.1f,u=%.1f] video=[d=%.1f,u=%.1f] kbit/sec",
bool_t as_active = as ? (media_stream_get_state(as) == MSStreamStarted) : FALSE;
bool_t vs_active = vs ? (media_stream_get_state(vs) == MSStreamStarted) : FALSE;
call->stats[LINPHONE_CALL_STATS_AUDIO].download_bandwidth=(as_active) ? (media_stream_get_down_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_AUDIO].upload_bandwidth=(as_active) ? (media_stream_get_up_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].download_bandwidth=(vs_active) ? (media_stream_get_down_bw(vs)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].upload_bandwidth=(vs_active) ? (media_stream_get_up_bw(vs)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_download_bandwidth=(as_active) ? (media_stream_get_rtcp_down_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_upload_bandwidth=(as_active) ? (media_stream_get_rtcp_up_bw(as)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_download_bandwidth=(vs_active) ? (media_stream_get_rtcp_down_bw(vs)*1e-3) : 0;
call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_upload_bandwidth=(vs_active) ? (media_stream_get_rtcp_up_bw(vs)*1e-3) : 0;
ms_message("Bandwidth usage for call [%p]: audio[ rtp]=[d=%.1f,u=%.1f], video[ rtp]=[d=%.1f,u=%.1f] kbit/sec",
call,
call->stats[LINPHONE_CALL_STATS_AUDIO].download_bandwidth,
call->stats[LINPHONE_CALL_STATS_AUDIO].upload_bandwidth ,
call->stats[LINPHONE_CALL_STATS_VIDEO].download_bandwidth,
call->stats[LINPHONE_CALL_STATS_VIDEO].upload_bandwidth
);
ms_message(" [rtcp]=[d=%.1f,u=%.1f], video[rtcp]=[d=%.1f,u=%.1f] kbit/sec",
call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_download_bandwidth,
call->stats[LINPHONE_CALL_STATS_AUDIO].rtcp_upload_bandwidth ,
call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_download_bandwidth,
call->stats[LINPHONE_CALL_STATS_VIDEO].rtcp_upload_bandwidth
);
}
static void linphone_core_disconnected(LinphoneCore *lc, LinphoneCall *call){

View file

@ -559,8 +559,8 @@ void linphone_core_upload_log_collection(LinphoneCore *core) {
core->log_collection_upload_information = (LinphoneContent *)malloc(sizeof(LinphoneContent));
memset(core->log_collection_upload_information, 0, sizeof(LinphoneContent));
#ifdef HAVE_ZLIB
core->log_collection_upload_information->type = "application";
core->log_collection_upload_information->subtype = "gzip";
linphone_content_set_type(core->log_collection_upload_information, "application");
linphone_content_set_subtype(core->log_collection_upload_information, "gzip");
#else
linphone_content_set_type(core->log_collection_upload_information, "text");
linphone_content_set_subtype(core->log_collection_upload_information,"plain");
@ -982,12 +982,13 @@ static void rtp_config_read(LinphoneCore *lc)
linphone_core_set_avpf_mode(lc,lp_config_get_int(lc->config,"rtp","avpf",0));
}
static PayloadType * find_payload(RtpProfile *prof, const char *mime_type, int clock_rate, int channels, const char *recv_fmtp){
static PayloadType * find_payload(const MSList *default_list, const char *mime_type, int clock_rate, int channels, const char *recv_fmtp){
PayloadType *candidate=NULL;
int i;
PayloadType *it;
for(i=0;i<RTP_PROFILE_MAX_PAYLOADS;++i){
it=rtp_profile_get_payload(prof,i);
const MSList *elem;
for(elem=default_list;elem!=NULL;elem=elem->next){
it=(PayloadType*)elem->data;
if (it!=NULL && strcasecmp(mime_type,it->mime_type)==0
&& (clock_rate==it->clock_rate || clock_rate<=0)
&& (channels==it->channels || channels<=0) ){
@ -1009,7 +1010,20 @@ static PayloadType * find_payload(RtpProfile *prof, const char *mime_type, int c
return candidate;
}
static bool_t get_codec(LinphoneCore *lc, const char* type, int index, PayloadType **ret){
static PayloadType* find_payload_type_from_list(const char* type, int rate, int channels, const MSList* from) {
const MSList *elem;
for(elem=from;elem!=NULL;elem=elem->next){
PayloadType *pt=(PayloadType*)elem->data;
if ((strcasecmp(type, payload_type_get_mime(pt)) == 0)
&& (rate == LINPHONE_FIND_PAYLOAD_IGNORE_RATE || rate==pt->clock_rate)
&& (channels == LINPHONE_FIND_PAYLOAD_IGNORE_CHANNELS || channels==pt->channels)) {
return pt;
}
}
return NULL;
}
static bool_t get_codec(LinphoneCore *lc, SalStreamType type, int index, PayloadType **ret){
char codeckey[50];
const char *mime,*fmtp;
int rate,channels,enabled;
@ -1017,7 +1031,7 @@ static bool_t get_codec(LinphoneCore *lc, const char* type, int index, PayloadTy
LpConfig *config=lc->config;
*ret=NULL;
snprintf(codeckey,50,"%s_%i",type,index);
snprintf(codeckey,50,"%s_codec_%i",type==SalAudio ? "audio" : "video", index);
mime=lp_config_get_string(config,codeckey,"mime",NULL);
if (mime==NULL || strlen(mime)==0 ) return FALSE;
@ -1025,85 +1039,52 @@ static bool_t get_codec(LinphoneCore *lc, const char* type, int index, PayloadTy
fmtp=lp_config_get_string(config,codeckey,"recv_fmtp",NULL);
channels=lp_config_get_int(config,codeckey,"channels",0);
enabled=lp_config_get_int(config,codeckey,"enabled",1);
pt=find_payload(lc->default_profile,mime,rate,channels,fmtp);
if (pt && enabled ) pt->flags|=PAYLOAD_TYPE_ENABLED;
//ms_message("Found codec %s/%i",pt->mime_type,pt->clock_rate);
if (pt==NULL) ms_warning("Ignoring codec config %s/%i with fmtp=%s because unsupported",
mime,rate,fmtp ? fmtp : "");
if (!ms_filter_codec_supported(mime)){
ms_warning("Codec %s/%i read from conf is not supported by mediastreamer2, ignored.",mime,rate);
return TRUE;
}
pt=find_payload(type==SalAudio ? lc->default_audio_codecs : lc->default_video_codecs,mime,rate,channels,fmtp);
if (!pt){
MSList **default_list=(type==SalAudio) ? &lc->default_audio_codecs : &lc->default_video_codecs;
ms_warning("Codec %s/%i read from conf is not in the default list.",mime,rate);
pt=payload_type_new();
pt->type=(type==SalAudio) ? PAYLOAD_AUDIO_PACKETIZED : PAYLOAD_VIDEO;
pt->mime_type=ortp_strdup(mime);
pt->clock_rate=rate;
pt->channels=channels;
payload_type_set_recv_fmtp(pt,fmtp);
*default_list=ms_list_append(*default_list, pt);
}
if (enabled ) pt->flags|=PAYLOAD_TYPE_ENABLED;
*ret=pt;
return TRUE;
}
#define RANK_END 10000
typedef struct codec_desc{
const char *name;
int rate;
}codec_desc_t;
static codec_desc_t codec_pref_order[]={
{"opus", 48000},
{"SILK", 16000},
{"speex", 16000},
{"speex", 8000},
{"pcmu",8000},
{"pcma",8000},
{"VP8",90000},
{"H264",90000},
{"MP4V-ES",90000},
{NULL,0}
};
static int find_codec_rank(const char *mime, int clock_rate){
int i;
#ifdef __arm__
/*hack for opus, that needs to be disabed by default on ARM single processor, otherwise there is no cpu left for video processing*/
if (strcasecmp(mime,"opus")==0){
if (ms_get_cpu_count()==1) return RANK_END;
}
#endif
for(i=0;codec_pref_order[i].name!=NULL;++i){
if (strcasecmp(codec_pref_order[i].name,mime)==0 && clock_rate==codec_pref_order[i].rate)
return i;
}
return RANK_END;
}
static int codec_compare(const PayloadType *a, const PayloadType *b){
int ra,rb;
ra=find_codec_rank(a->mime_type,a->clock_rate);
rb=find_codec_rank(b->mime_type,b->clock_rate);
if (ra>rb) return 1;
if (ra<rb) return -1;
return 1;
}
static MSList *add_missing_codecs(LinphoneCore *lc, SalStreamType mtype, MSList *l){
int i;
for(i=0;i<RTP_PROFILE_MAX_PAYLOADS;++i){
PayloadType *pt=rtp_profile_get_payload(lc->default_profile,i);
if (pt){
if (mtype==SalVideo && pt->type!=PAYLOAD_VIDEO)
pt=NULL;
else if (mtype==SalAudio && (pt->type!=PAYLOAD_AUDIO_PACKETIZED
&& pt->type!=PAYLOAD_AUDIO_CONTINUOUS)){
pt=NULL;
}
if (pt && ms_filter_codec_supported(pt->mime_type)){
if (ms_list_find(l,pt)==NULL){
/*unranked codecs are disabled by default*/
if (find_codec_rank(pt->mime_type, pt->clock_rate)!=RANK_END){
payload_type_set_flag(pt,PAYLOAD_TYPE_ENABLED);
}
ms_message("Adding new codec %s/%i with fmtp %s",
pt->mime_type,pt->clock_rate,pt->recv_fmtp ? pt->recv_fmtp : "");
l=ms_list_insert_sorted(l,pt,(int (*)(const void *, const void *))codec_compare);
}
/*this function merges the payload types from the codec default list with the list read from configuration file.
* If a new codec becomes supported in Liblinphone or if the list from configuration file is empty or incomplete, all the supported codecs are added
* automatically. This 'l' list is entirely destroyed and rewritten.*/
static MSList *add_missing_codecs(const MSList *default_list, MSList *l){
const MSList *elem;
MSList *newlist;
for(elem=default_list; elem!=NULL; elem=elem->next){
MSList *elem2=ms_list_find(l,elem->data);
if (!elem2){
PayloadType *pt=(PayloadType*)elem->data;
/*this codec from default list should be inserted in the list*/
if (!elem->prev){
l=ms_list_prepend(l,pt);
}else{
const MSList *after=ms_list_find(l,elem->prev->data);
l=ms_list_insert(l, after->next, pt);
}
ms_message("Supported codec %s/%i fmtp=%s automatically added to codec list.", pt->mime_type,
pt->clock_rate, pt->recv_fmtp ? pt->recv_fmtp : "");
}
}
return l;
newlist=ms_list_copy_with_data(l,(void *(*)(void*))payload_type_clone);
ms_list_free(l);
return newlist;
}
static MSList *codec_append_if_new(MSList *l, PayloadType *pt){
@ -1123,23 +1104,23 @@ static void codecs_config_read(LinphoneCore *lc)
PayloadType *pt;
MSList *audio_codecs=NULL;
MSList *video_codecs=NULL;
for (i=0;get_codec(lc,"audio_codec",i,&pt);i++){
lc->codecs_conf.dyn_pt=96;
lc->codecs_conf.telephone_event_pt=lp_config_get_int(lc->config,"misc","telephone_event_pt",101);
for (i=0;get_codec(lc,SalAudio,i,&pt);i++){
if (pt){
if (!ms_filter_codec_supported(pt->mime_type)){
ms_warning("Codec %s is not supported by mediastreamer2, removed.",pt->mime_type);
}else audio_codecs=codec_append_if_new(audio_codecs,pt);
audio_codecs=codec_append_if_new(audio_codecs, pt);
}
}
audio_codecs=add_missing_codecs(lc,SalAudio,audio_codecs);
audio_codecs=add_missing_codecs(lc->default_audio_codecs,audio_codecs);
for (i=0;get_codec(lc,"video_codec",i,&pt);i++){
for (i=0;get_codec(lc,SalVideo,i,&pt);i++){
if (pt){
if (!ms_filter_codec_supported(pt->mime_type)){
ms_warning("Codec %s is not supported by mediastreamer2, removed.",pt->mime_type);
}else video_codecs=codec_append_if_new(video_codecs,(void *)pt);
video_codecs=codec_append_if_new(video_codecs, pt);
}
}
video_codecs=add_missing_codecs(lc,SalVideo,video_codecs);
video_codecs=add_missing_codecs(lc->default_video_codecs,video_codecs);
linphone_core_set_audio_codecs(lc,audio_codecs);
linphone_core_set_video_codecs(lc,video_codecs);
linphone_core_update_allocated_audio_bandwidth(lc);
@ -1412,60 +1393,45 @@ const char * linphone_core_get_version(void){
return liblinphone_version;
}
static void linphone_core_assign_payload_type(LinphoneCore *lc, PayloadType *const_pt, int number, const char *recv_fmtp){
PayloadType *pt;
pt=payload_type_clone(const_pt);
if (number==-1){
/*look for a free number */
MSList *elem;
int i;
for(i=lc->dyn_pt;i<RTP_PROFILE_MAX_PAYLOADS;++i){
bool_t already_assigned=FALSE;
for(elem=lc->payload_types;elem!=NULL;elem=elem->next){
PayloadType *it=(PayloadType*)elem->data;
if (payload_type_get_number(it)==i){
already_assigned=TRUE;
break;
}
}
if (!already_assigned){
number=i;
lc->dyn_pt=i+1;
break;
}
}
if (number==-1){
ms_fatal("FIXME: too many codecs, no more free numbers.");
}
static void linphone_core_register_payload_type(LinphoneCore *lc, const PayloadType *const_pt, const char *recv_fmtp, bool_t enabled){
MSList **codec_list=const_pt->type==PAYLOAD_VIDEO ? &lc->default_video_codecs : &lc->default_audio_codecs;
if (ms_filter_codec_supported(const_pt->mime_type)){
PayloadType *pt=payload_type_clone(const_pt);
int number=-1;
payload_type_set_enable(pt,enabled);
if (recv_fmtp!=NULL) payload_type_set_recv_fmtp(pt,recv_fmtp);
/*Set a number to the payload type from the statically defined (RFC3551) profile, if not static, -1 is returned
and the payload type number will be determined dynamically later, at call time.*/
payload_type_set_number(pt,
(number=rtp_profile_find_payload_number(&av_profile, pt->mime_type, pt->clock_rate, pt->channels))
);
ms_message("Codec %s/%i fmtp=[%s] number=%i, enabled=%i) added to default capabilities.", pt->mime_type, pt->clock_rate,
pt->recv_fmtp ? pt->recv_fmtp : "", number, (int)payload_type_enabled(pt));
*codec_list=ms_list_append(*codec_list,pt);
}
ms_message("assigning %s/%i payload type number %i",pt->mime_type,pt->clock_rate,number);
payload_type_set_number(pt,number);
if (recv_fmtp!=NULL) payload_type_set_recv_fmtp(pt,recv_fmtp);
rtp_profile_set_payload(lc->default_profile,number,pt);
lc->payload_types=ms_list_append(lc->payload_types,pt);
}
static void linphone_core_handle_static_payloads(LinphoneCore *lc){
static void linphone_core_register_static_payloads(LinphoneCore *lc){
RtpProfile *prof=&av_profile;
int i;
for(i=0;i<RTP_PROFILE_MAX_PAYLOADS;++i){
PayloadType *pt=rtp_profile_get_payload(prof,i);
if (pt){
// insert static payload only if no profile exists
if (rtp_profile_get_payload(lc->default_profile,i) == NULL){
linphone_core_assign_payload_type(lc,pt,i,NULL);
#ifndef VIDEO_ENABLED
if (pt->type==PAYLOAD_VIDEO) continue;
#endif
if (find_payload_type_from_list(
pt->mime_type, pt->clock_rate, pt->type!=PAYLOAD_VIDEO ? pt->channels : LINPHONE_FIND_PAYLOAD_IGNORE_CHANNELS,
pt->type==PAYLOAD_VIDEO ? lc->default_video_codecs : lc->default_audio_codecs)==NULL){
linphone_core_register_payload_type(lc,pt,NULL,FALSE);
}
}
}
}
static void linphone_core_free_payload_types(LinphoneCore *lc){
rtp_profile_clear_all(lc->default_profile);
rtp_profile_destroy(lc->default_profile);
ms_list_for_each(lc->payload_types,(void (*)(void*))payload_type_destroy);
ms_list_free(lc->payload_types);
lc->payload_types=NULL;
ms_list_free_with_data(lc->default_audio_codecs, (void (*)(void*))payload_type_destroy);
ms_list_free_with_data(lc->default_video_codecs, (void (*)(void*))payload_type_destroy);
}
void linphone_core_set_state(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message){
@ -1523,10 +1489,91 @@ void linphone_configuring_terminated(LinphoneCore *lc, LinphoneConfiguringState
linphone_core_start(lc);
}
static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtable, LpConfig *config, void * userdata)
{
const char *remote_provisioning_uri = NULL;
static int linphone_core_serialization_ref = 0;
static void linphone_core_activate_log_serialization_if_needed(void) {
if (liblinphone_serialize_logs == TRUE) {
linphone_core_serialization_ref++;
if (linphone_core_serialization_ref == 1)
ortp_set_log_thread_id(ortp_thread_self());
}
}
static void linphone_core_deactivate_log_serialization_if_needed(void) {
if (liblinphone_serialize_logs == TRUE) {
--linphone_core_serialization_ref;
if (linphone_core_serialization_ref == 0)
ortp_set_log_thread_id(0);
}
}
static void linphone_core_register_default_codecs(LinphoneCore *lc){
const char *aac_fmtp162248, *aac_fmtp3244;
bool_t opus_enabled=TRUE;
/*default enabled audio codecs, in order of preference*/
#ifdef __arm__
/*hack for opus, that needs to be disabed by default on ARM single processor, otherwise there is no cpu left for video processing*/
if (ms_get_cpu_count()==1) opus_enabled=FALSE;
#endif
linphone_core_register_payload_type(lc,&payload_type_opus,"useinbandfec=1; stereo=0; sprop-stereo=0",opus_enabled);
linphone_core_register_payload_type(lc,&payload_type_silk_wb,NULL,TRUE);
linphone_core_register_payload_type(lc,&payload_type_speex_wb,"vbr=on",TRUE);
linphone_core_register_payload_type(lc,&payload_type_speex_nb,"vbr=on",TRUE);
linphone_core_register_payload_type(lc,&payload_type_pcmu8000,NULL,TRUE);
linphone_core_register_payload_type(lc,&payload_type_pcma8000,NULL,TRUE);
/*other audio codecs, not enabled by default, in order of preference*/
linphone_core_register_payload_type(lc,&payload_type_gsm,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_g722,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_ilbc,"mode=30",FALSE);
linphone_core_register_payload_type(lc,&payload_type_amr,"octet-align=1",FALSE);
linphone_core_register_payload_type(lc,&payload_type_amrwb,"octet-align=1",FALSE);
linphone_core_register_payload_type(lc,&payload_type_g729,"annexb=no",FALSE);
/* For AAC, we use a config value to determine if we ought to support SBR. Since it is not offically supported
* for the mpeg4-generic mime type, setting this flag to 1 will break compatibility with other clients. */
if( lp_config_get_int(lc->config, "misc", "aac_use_sbr", FALSE) ) {
ms_message("Using SBR for AAC");
aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1";
aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1";
} else {
aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5";
aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5";
}
linphone_core_register_payload_type(lc,&payload_type_aaceld_16k,aac_fmtp162248,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aaceld_22k,aac_fmtp162248,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aaceld_32k,aac_fmtp3244,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aaceld_44k,aac_fmtp3244,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aaceld_48k,aac_fmtp162248,FALSE);
linphone_core_register_payload_type(lc,&payload_type_isac,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_speex_uwb,"vbr=on",FALSE);
linphone_core_register_payload_type(lc,&payload_type_silk_nb,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_silk_mb,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_silk_swb,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_g726_16,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_g726_24,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_g726_32,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_g726_40,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aal2_g726_16,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aal2_g726_24,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aal2_g726_32,NULL,FALSE);
linphone_core_register_payload_type(lc,&payload_type_aal2_g726_40,NULL,FALSE);
#ifdef VIDEO_ENABLED
/*default enabled video codecs, in order of preference*/
linphone_core_register_payload_type(lc,&payload_type_vp8,NULL,TRUE);
linphone_core_register_payload_type(lc,&payload_type_h264,"profile-level-id=42801F",TRUE);
linphone_core_register_payload_type(lc,&payload_type_mp4v,"profile-level-id=3",TRUE);
linphone_core_register_payload_type(lc,&payload_type_h263_1998,"CIF=1;QCIF=1",FALSE);
linphone_core_register_payload_type(lc,&payload_type_h263,NULL,FALSE);
#endif
/*register all static payload types declared in av_profile of oRTP, if not already declared above*/
linphone_core_register_static_payloads(lc);
}
static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtable, LpConfig *config, void * userdata){
const char *remote_provisioning_uri = NULL;
LinphoneCoreVTable* local_vtable= linphone_core_v_table_new();
ms_message("Initializing LinphoneCore %s", linphone_core_get_version());
@ -1539,86 +1586,11 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab
linphone_core_set_state(lc,LinphoneGlobalStartup,"Starting up");
ortp_init();
if (liblinphone_serialize_logs == TRUE) {
ortp_set_log_thread_id(ortp_thread_self());
}
lc->dyn_pt=96;
lc->default_profile=rtp_profile_new("default profile");
linphone_core_assign_payload_type(lc,&payload_type_pcmu8000,0,NULL);
linphone_core_assign_payload_type(lc,&payload_type_gsm,3,NULL);
linphone_core_assign_payload_type(lc,&payload_type_pcma8000,8,NULL);
linphone_core_assign_payload_type(lc,&payload_type_speex_nb,110,"vbr=on");
linphone_core_assign_payload_type(lc,&payload_type_speex_wb,111,"vbr=on");
linphone_core_assign_payload_type(lc,&payload_type_speex_uwb,112,"vbr=on");
linphone_core_assign_payload_type(lc,&payload_type_telephone_event,101,"0-15");
linphone_core_assign_payload_type(lc,&payload_type_g722,9,NULL);
#ifdef ENABLE_NONSTANDARD_GSM
{
PayloadType *pt;
pt=payload_type_clone(&payload_type_gsm);
pt->clock_rate=11025;
linphone_core_assign_payload_type(lc,pt,-1,NULL);
pt->clock_rate=22050;
linphone_core_assign_payload_type(lc,pt,-1,NULL);
payload_type_destroy(pt);
}
#endif
#ifdef VIDEO_ENABLED
linphone_core_assign_payload_type(lc,&payload_type_h263,34,NULL);
linphone_core_assign_payload_type(lc,&payload_type_h263_1998,98,"CIF=1;QCIF=1");
linphone_core_assign_payload_type(lc,&payload_type_mp4v,99,"profile-level-id=3");
linphone_core_assign_payload_type(lc,&payload_type_h264,102,"profile-level-id=42801F");
linphone_core_assign_payload_type(lc,&payload_type_vp8,103,NULL);
/* linphone_core_assign_payload_type(lc,&payload_type_theora,97,NULL); commented out to free 1 slot */
/* linphone_core_assign_payload_type(lc,&payload_type_x_snow,-1,NULL); commented out to free 1 slot */
/* due to limited space in SDP, we have to disable this h264 line which is normally no more necessary */
/* linphone_core_assign_payload_type(&payload_type_h264,-1,"packetization-mode=1;profile-level-id=428014");*/
#endif
/* For AAC, we use a config value to determine if we ought to support SBR. Since it is not offically supported
* for the mpeg4-generic mime type, setting this flag to 1 will break compatibility with other clients. */
if( lp_config_get_int(lc->config, "misc", "aac_use_sbr", FALSE) ) {
ms_message("Using SBR for AAC");
aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1";
aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1";
} else {
aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5";
aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5";
}
/*add all payload type for which we don't care about the number */
linphone_core_assign_payload_type(lc,&payload_type_ilbc,-1,"mode=30");
linphone_core_assign_payload_type(lc,&payload_type_amr,-1,"octet-align=1");
linphone_core_assign_payload_type(lc,&payload_type_amrwb,-1,"octet-align=1");
/* linphone_core_assign_payload_type(lc,&payload_type_lpc1015,-1,NULL); commented out to free 1 slot */
linphone_core_assign_payload_type(lc,&payload_type_g726_16,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_g726_24,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_g726_32,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_g726_40,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_16,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_24,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_32,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_aal2_g726_40,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_silk_nb,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_silk_mb,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_silk_wb,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_silk_swb,-1,NULL);
linphone_core_assign_payload_type(lc,&payload_type_g729,18,"annexb=no");
linphone_core_assign_payload_type(lc,&payload_type_aaceld_16k,-1,aac_fmtp162248);
linphone_core_assign_payload_type(lc,&payload_type_aaceld_22k,-1,aac_fmtp162248);
linphone_core_assign_payload_type(lc,&payload_type_aaceld_32k,-1,aac_fmtp3244);
linphone_core_assign_payload_type(lc,&payload_type_aaceld_44k,-1,aac_fmtp3244);
linphone_core_assign_payload_type(lc,&payload_type_aaceld_48k,-1,aac_fmtp162248);
linphone_core_assign_payload_type(lc,&payload_type_opus,-1,"useinbandfec=1; stereo=0; sprop-stereo=0");
linphone_core_assign_payload_type(lc,&payload_type_isac,-1,NULL);
linphone_core_handle_static_payloads(lc);
linphone_core_activate_log_serialization_if_needed();
ms_init();
linphone_core_register_default_codecs(lc);
/* create a mediastreamer2 event queue and set it as global */
/* This allows to run event's callback in linphone_core_iterate() */
lc->msevq=ms_event_queue_new();
@ -1825,8 +1797,7 @@ LinphoneAddress *linphone_core_get_primary_contact_parsed(LinphoneCore *lc){
* The list is taken by the LinphoneCore thus the application should not free it.
* This list is made of struct PayloadType describing the codec parameters.
**/
int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs)
{
int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs){
if (lc->codecs_conf.audio_codecs!=NULL) ms_list_free(lc->codecs_conf.audio_codecs);
lc->codecs_conf.audio_codecs=codecs;
_linphone_core_codec_config_write(lc);
@ -1844,8 +1815,7 @@ int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs)
* The list is taken by the LinphoneCore thus the application should not free it.
* This list is made of struct PayloadType describing the codec parameters.
**/
int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs)
{
int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *codecs){
if (lc->codecs_conf.video_codecs!=NULL) ms_list_free(lc->codecs_conf.video_codecs);
lc->codecs_conf.video_codecs=codecs;
_linphone_core_codec_config_write(lc);
@ -2109,7 +2079,7 @@ void linphone_core_set_use_rfc2833_for_dtmf(LinphoneCore *lc,bool_t use_rfc2833)
/**
* Returns the UDP port used by SIP.
*
* Deprecated: use linphone_core_get_sip_transports() instead.
* @deprecated use linphone_core_get_sip_transports() instead.
* @ingroup network_parameters
**/
int linphone_core_get_sip_port(LinphoneCore *lc){
@ -2277,7 +2247,7 @@ void linphone_core_get_sip_transports_used(LinphoneCore *lc, LCSipTransports *tr
/**
* Sets the UDP port to be used by SIP.
*
* Deprecated: use linphone_core_set_sip_transports() instead.
* @deprecated use linphone_core_set_sip_transports() instead.
* @ingroup network_parameters
**/
void linphone_core_set_sip_port(LinphoneCore *lc,int port)
@ -2609,6 +2579,15 @@ void linphone_core_iterate(LinphoneCore *lc){
}
}
static LinphoneAddress* _linphone_core_destroy_addr_if_not_sip( LinphoneAddress* addr ){
if( linphone_address_is_sip(addr) ) {
return addr;
} else {
linphone_address_destroy(addr);
return NULL;
}
}
/**
* Interpret a call destination as supplied by the user, and returns a fully qualified
* LinphoneAddress.
@ -2645,7 +2624,7 @@ LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url)
tmpurl=enumres->sip_address[0];
uri=linphone_address_new(tmpurl);
enum_lookup_res_free(enumres);
return uri;
return _linphone_core_destroy_addr_if_not_sip(uri);
}
/* check if we have a "sip:" or a "sips:" */
if ( (strstr(url,"sip:")==NULL) && (strstr(url,"sips:")==NULL) ){
@ -2656,7 +2635,7 @@ LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url)
uri=linphone_address_new(tmpurl);
ms_free(tmpurl);
if (uri){
return uri;
return _linphone_core_destroy_addr_if_not_sip(uri);
}
}
@ -2672,12 +2651,12 @@ LinphoneAddress * linphone_core_interpret_url(LinphoneCore *lc, const char *url)
linphone_proxy_config_normalize_number(proxy,url,normalized_username,
sizeof(normalized_username));
linphone_address_set_username(uri,normalized_username);
return uri;
return _linphone_core_destroy_addr_if_not_sip(uri);
}else return NULL;
}
uri=linphone_address_new(url);
if (uri!=NULL){
return uri;
return _linphone_core_destroy_addr_if_not_sip(uri);
}
return NULL;
@ -3922,10 +3901,10 @@ int _linphone_core_pause_call(LinphoneCore *lc, LinphoneCall *call)
linphone_core_notify_display_warning(lc,_("Could not pause the call"));
}
lc->current_call=NULL;
linphone_call_set_state(call,LinphoneCallPausing,"Pausing call");
linphone_core_notify_display_status(lc,_("Pausing the current call..."));
if (call->audiostream || call->videostream)
linphone_call_stop_media_streams (call);
linphone_call_set_state(call,LinphoneCallPausing,"Pausing call");
call->paused_by_app=FALSE;
return 0;
}
@ -5624,6 +5603,26 @@ MSVideoSize linphone_core_get_preview_video_size(const LinphoneCore *lc){
return lc->video_conf.preview_vsize;
}
/**
* Returns the effective video size for the captured video as provided by the camera.
* When preview is disabled or not yet started, this function returns a zeroed video size.
* @see linphone_core_set_preview_video_size()
* @ingroup media_parameters
* @param lc the core
* @return a MSVideoSize
**/
MSVideoSize linphone_core_get_current_preview_video_size(const LinphoneCore *lc){
MSVideoSize ret={0};
#ifndef VIDEO_ENABLED
ms_error("linphone_core_get_current_preview_video_size() fail. Support for video is disabled");
#else
if (lc->previewstream){
ret=video_preview_get_current_size(lc->previewstream);
}
#endif
return ret;
}
/**
* Sets the preview video size by its name. See linphone_core_set_preview_video_size() for more information about this feature.
*
@ -5975,7 +5974,7 @@ void linphone_core_set_rtp_transport_factories(LinphoneCore* lc, LinphoneRtpTran
*
* @note Remote RTP statistics is not implemented yet.
*
* @returns 0 or -1 if no call is running.
* @return 0 or -1 if no call is running.
**/
int linphone_core_get_current_call_stats(LinphoneCore *lc, rtp_stats_t *local, rtp_stats_t *remote){
@ -6167,8 +6166,8 @@ void _linphone_core_codec_config_write(LinphoneCore *lc){
static void codecs_config_uninit(LinphoneCore *lc)
{
_linphone_core_codec_config_write(lc);
ms_list_free(lc->codecs_conf.audio_codecs);
ms_list_free(lc->codecs_conf.video_codecs);
ms_list_free_with_data(lc->codecs_conf.audio_codecs, (void (*)(void*))payload_type_destroy);
ms_list_free_with_data(lc->codecs_conf.video_codecs, (void (*)(void*))payload_type_destroy);
}
void ui_config_uninit(LinphoneCore* lc)
@ -6279,9 +6278,7 @@ static void linphone_core_uninit(LinphoneCore *lc)
linphone_core_message_storage_close(lc);
ms_exit();
linphone_core_set_state(lc,LinphoneGlobalOff,"Off");
if (liblinphone_serialize_logs == TRUE) {
ortp_set_log_thread_id(0);
}
linphone_core_deactivate_log_serialization_if_needed();
ms_list_free_with_data(lc->vtables,(void (*)(void *))linphone_core_v_table_destroy);
}
@ -6401,11 +6398,32 @@ bool_t linphone_core_can_we_add_call(LinphoneCore *lc)
static void notify_soundcard_usage(LinphoneCore *lc, bool_t used){
MSSndCard *card=lc->sound_conf.capt_sndcard;
if (card && ms_snd_card_get_capabilities(card) & MS_SND_CARD_CAP_IS_SLOW){
ms_message("Notifying soundcard that we don't need it anymore for calls.");
ms_snd_card_set_usage_hint(card,used);
}
}
void linphone_core_soundcard_hint_check( LinphoneCore* lc){
MSList* the_calls = lc->calls;
LinphoneCall* call = NULL;
bool_t dont_need_sound = TRUE;
/* check if the remaining calls are paused */
while( the_calls ){
call = the_calls->data;
if( call->state != LinphoneCallPausing && call->state != LinphoneCallPaused ){
dont_need_sound = FALSE;
break;
}
the_calls = the_calls->next;
}
/* if no more calls or all calls are paused, we can free the soundcard */
if ( (lc->calls==NULL || dont_need_sound) && !lc->use_files){
ms_message("Notifying soundcard that we don't need it anymore for calls.");
notify_soundcard_usage(lc,FALSE);
}
}
int linphone_core_add_call( LinphoneCore *lc, LinphoneCall *call)
{
if (linphone_core_can_we_add_call(lc)){
@ -6432,7 +6450,7 @@ int linphone_core_del_call( LinphoneCore *lc, LinphoneCall *call)
return -1;
}
lc->calls = the_calls;
if (lc->calls==NULL) notify_soundcard_usage(lc,FALSE);
return 0;
}
@ -6455,20 +6473,6 @@ const char *linphone_core_get_remote_ringback_tone(const LinphoneCore *lc){
return lc->sound_conf.ringback_tone;
}
static PayloadType* find_payload_type_from_list(const char* type, int rate, int channels, const MSList* from) {
const MSList *elem;
for(elem=from;elem!=NULL;elem=elem->next){
PayloadType *pt=(PayloadType*)elem->data;
if ((strcasecmp((char*)type, payload_type_get_mime(pt)) == 0)
&& (rate == LINPHONE_FIND_PAYLOAD_IGNORE_RATE || rate==pt->clock_rate)
&& (channels == LINPHONE_FIND_PAYLOAD_IGNORE_CHANNELS || channels==pt->channels)) {
return pt;
}
}
return NULL;
}
LinphonePayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate, int channels) {
LinphonePayloadType* result = find_payload_type_from_list(type, rate, channels, linphone_core_get_audio_codecs(lc));
if (result) {
@ -6770,7 +6774,7 @@ const char *linphone_media_encryption_to_string(LinphoneMediaEncryption menc){
bool_t linphone_core_media_encryption_supported(const LinphoneCore *lc, LinphoneMediaEncryption menc){
switch(menc){
case LinphoneMediaEncryptionSRTP:
return media_stream_srtp_supported();
return ms_srtp_supported();
case LinphoneMediaEncryptionZRTP:
return ms_zrtp_available();
case LinphoneMediaEncryptionNone:
@ -6783,7 +6787,7 @@ int linphone_core_set_media_encryption(LinphoneCore *lc, LinphoneMediaEncryption
const char *type="none";
int ret=0;
if (menc == LinphoneMediaEncryptionSRTP){
if (!media_stream_srtp_supported()){
if (!ms_srtp_supported()){
ms_warning("SRTP not supported by library.");
type="none";
ret=-1;
@ -7019,7 +7023,7 @@ int linphone_payload_type_get_normal_bitrate(const LinphonePayloadType *pt) {
return pt->normal_bitrate;
}
char * linphone_payload_type_get_mime_type(const LinphonePayloadType *pt) {
const char * linphone_payload_type_get_mime_type(const LinphonePayloadType *pt) {
return pt->mime_type;
}
@ -7032,9 +7036,6 @@ LinphoneCoreVTable *linphone_core_v_table_new() {
}
void linphone_core_v_table_set_user_data(LinphoneCoreVTable *table, void *data) {
if (table->user_data) {
ms_free(table->user_data);
}
table->user_data = data;
}
@ -7043,9 +7044,6 @@ void* linphone_core_v_table_get_user_data(LinphoneCoreVTable *table) {
}
void linphone_core_v_table_destroy(LinphoneCoreVTable* table) {
if (table->user_data) {
ms_free(table->user_data);
}
ms_free(table);
}

View file

@ -257,7 +257,7 @@ LINPHONE_PUBLIC int linphone_payload_type_get_normal_bitrate(const LinphonePaylo
* @param[in] pt LinphonePayloadType object
* @return The mime type.
*/
LINPHONE_PUBLIC char * linphone_payload_type_get_mime_type(const LinphonePayloadType *pt);
LINPHONE_PUBLIC const char * linphone_payload_type_get_mime_type(const LinphonePayloadType *pt);
/**
* Get the number of channels.
@ -366,12 +366,14 @@ LINPHONE_PUBLIC const char* linphone_privacy_to_string(LinphonePrivacy privacy);
#ifdef IN_LINPHONE
#include "buffer.h"
#include "call_log.h"
#include "call_params.h"
#include "content.h"
#include "event.h"
#include "linphonefriend.h"
#else
#include "linphone/buffer.h"
#include "linphone/call_log.h"
#include "linphone/call_params.h"
#include "linphone/content.h"
@ -395,11 +397,13 @@ LINPHONE_PUBLIC void linphone_address_set_port(LinphoneAddress *uri, int port);
/*remove tags, params etc... so that it is displayable to the user*/
LINPHONE_PUBLIC void linphone_address_clean(LinphoneAddress *uri);
LINPHONE_PUBLIC bool_t linphone_address_is_secure(const LinphoneAddress *uri);
LINPHONE_PUBLIC bool_t linphone_address_is_sip(const LinphoneAddress *uri);
LINPHONE_PUBLIC LinphoneTransportType linphone_address_get_transport(const LinphoneAddress *uri);
LINPHONE_PUBLIC void linphone_address_set_transport(LinphoneAddress *uri,LinphoneTransportType type);
LINPHONE_PUBLIC char *linphone_address_as_string(const LinphoneAddress *u);
LINPHONE_PUBLIC char *linphone_address_as_string_uri_only(const LinphoneAddress *u);
LINPHONE_PUBLIC bool_t linphone_address_weak_equal(const LinphoneAddress *a1, const LinphoneAddress *a2);
LINPHONE_PUBLIC bool_t linphone_address_equal(const LinphoneAddress *a1, const LinphoneAddress *a2);
LINPHONE_PUBLIC void linphone_address_set_password(LinphoneAddress *addr, const char *passwd);
LINPHONE_PUBLIC const char *linphone_address_get_password(const LinphoneAddress *addr);
LINPHONE_PUBLIC void linphone_address_set_header(LinphoneAddress *addr, const char *header_name, const char *header_value);
@ -539,6 +543,8 @@ struct _LinphoneCallStats {
float local_late_rate; /**<percentage of packet received too late over last second*/
float local_loss_rate; /**<percentage of lost packet over last second*/
int updated; /**< Tell which RTCP packet has been updated (received_rtcp or sent_rtcp). Can be either LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE or LINPHONE_CALL_STATS_SENT_RTCP_UPDATE */
float rtcp_download_bandwidth; /**<RTCP download bandwidth measurement of received stream, expressed in kbit/s, including IP/UDP/RTP headers*/
float rtcp_upload_bandwidth; /**<RTCP download bandwidth measurement of sent stream, expressed in kbit/s, including IP/UDP/RTP headers*/
};
/**
@ -724,7 +730,7 @@ LINPHONE_PUBLIC bool_t linphone_call_media_in_progress(LinphoneCall *call);
* The dtmf is automatically played to the user.
* @param call The LinphoneCall object
* @param dtmf The dtmf name specified as a char, such as '0', '#' etc...
* @returns 0 if successful, -1 on error.
* @return 0 if successful, -1 on error.
**/
LINPHONE_PUBLIC int linphone_call_send_dtmf(LinphoneCall *lc,char dtmf);
@ -735,7 +741,7 @@ LINPHONE_PUBLIC int linphone_call_send_dtmf(LinphoneCall *lc,char dtmf);
* Sending is canceled if the call state changes to something not LinphoneCallStreamsRunning.
* @param call The LinphoneCall object
* @param dtmfs A dtmf sequence such as '123#123123'
* @returns -2 if there is already a DTMF sequence, -1 if call is not ready, 0 otherwise.
* @return -2 if there is already a DTMF sequence, -1 if call is not ready, 0 otherwise.
**/
LINPHONE_PUBLIC int linphone_call_send_dtmfs(LinphoneCall *call,char *dtmfs);
@ -957,7 +963,7 @@ LINPHONE_PUBLIC int linphone_proxy_config_get_quality_reporting_interval(Linphon
/**
* Get the registration state of the given proxy config.
* @param[in] obj #LinphoneProxyConfig object.
* @returns The registration state of the proxy config.
* @return The registration state of the proxy config.
**/
LINPHONE_PUBLIC LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyConfig *obj);
@ -966,21 +972,21 @@ LINPHONE_PUBLIC bool_t linphone_proxy_config_is_registered(const LinphoneProxyCo
/**
* Get the domain name of the given proxy config.
* @param[in] cfg #LinphoneProxyConfig object.
* @returns The domain name of the proxy config.
* @return The domain name of the proxy config.
**/
LINPHONE_PUBLIC const char *linphone_proxy_config_get_domain(const LinphoneProxyConfig *cfg);
/**
* Get the realm of the given proxy config.
* @param[in] cfg #LinphoneProxyConfig object.
* @returns The realm of the proxy config.
* @return The realm of the proxy config.
**/
LINPHONE_PUBLIC const char *linphone_proxy_config_get_realm(const LinphoneProxyConfig *cfg);
/**
* Set the realm of the given proxy config.
* @param[in] cfg #LinphoneProxyConfig object.
* @param[in] realm New realm value.
* @returns The realm of the proxy config.
* @return The realm of the proxy config.
**/
LINPHONE_PUBLIC void linphone_proxy_config_set_realm(LinphoneProxyConfig *cfg, const char * realm);
@ -1001,7 +1007,7 @@ LINPHONE_PUBLIC const char* linphone_proxy_config_get_contact_uri_parameters(con
/**
* Get the #LinphoneCore object to which is associated the #LinphoneProxyConfig.
* @param[in] obj #LinphoneProxyConfig object.
* @returns The #LinphoneCore object to which is associated the #LinphoneProxyConfig.
* @return The #LinphoneCore object to which is associated the #LinphoneProxyConfig.
**/
LINPHONE_PUBLIC LinphoneCore * linphone_proxy_config_get_core(const LinphoneProxyConfig *obj);
@ -1011,22 +1017,22 @@ LINPHONE_PUBLIC const char * linphone_proxy_config_get_dial_prefix(const Linphon
/**
* Get the reason why registration failed when the proxy config state is LinphoneRegistrationFailed.
* @param[in] cfg #LinphoneProxyConfig object.
* @returns The reason why registration failed for this proxy config.
* @return The reason why registration failed for this proxy config.
**/
LINPHONE_PUBLIC LinphoneReason linphone_proxy_config_get_error(const LinphoneProxyConfig *cfg);
/**
* Get detailed information why registration failed when the proxy config state is LinphoneRegistrationFailed.
* @param[in] cfg #LinphoneProxyConfig object.
* @returns The details why registration failed for this proxy config.
* @return The details why registration failed for this proxy config.
**/
LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_proxy_config_get_error_info(const LinphoneProxyConfig *cfg);
/*
* return the transport from either : service route, route, or addr
* @returns cfg object
* @return transport as string (I.E udp, tcp, tls, dtls)*/
/**
* Get the transport from either service route, route or addr.
* @param[in] cfg #LinphoneProxyConfig object.
* @return The transport as a string (I.E udp, tcp, tls, dtls)
**/
LINPHONE_PUBLIC const char* linphone_proxy_config_get_transport(const LinphoneProxyConfig *cfg);
@ -1035,10 +1041,27 @@ LINPHONE_PUBLIC void linphone_proxy_config_destroy(LinphoneProxyConfig *cfg);
LINPHONE_PUBLIC void linphone_proxy_config_set_sip_setup(LinphoneProxyConfig *cfg, const char *type);
SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig *cfg);
LINPHONE_PUBLIC SipSetup *linphone_proxy_config_get_sip_setup(LinphoneProxyConfig *cfg);
/**
* normalize a human readable phone number into a basic string. 888-444-222 becomes 888444222
* Detect if the given input is a phone number or not.
* @param proxy #LinphoneProxyConfig argument, unused yet but may contain useful data. Can be NULL.
* @param username string to parse.
* @return TRUE if input is a phone number, FALSE otherwise.
**/
LINPHONE_PUBLIC bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig *proxy, const char *username);
/**
* 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.
* @param username the string to parse
* @param result the newly normalized number
* @param result_len the size of the normalized number \a result
* @return TRUE if a phone number was recognized, FALSE otherwise.
*/
LINPHONE_PUBLIC int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len);
LINPHONE_PUBLIC bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username,
char *result, size_t result_len);
/**
* Set default privacy policy for all calls routed through this proxy.
@ -1331,9 +1354,10 @@ typedef enum _LinphoneChatMessageState {
/**
* Call back used to notify message delivery status
*@param msg #LinphoneChatMessage object
*@param status LinphoneChatMessageState
*@param ud application user data
* @param msg #LinphoneChatMessage object
* @param status LinphoneChatMessageState
* @param ud application user data
* @deprecated
*/
typedef void (*LinphoneChatMessageStateChangedCb)(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud);
@ -1342,40 +1366,34 @@ typedef void (*LinphoneChatMessageStateChangedCb)(LinphoneChatMessage* msg,Linph
* @param msg #LinphoneChatMessage object
* @param status LinphoneChatMessageState
*/
typedef void (*LinphoneChatMessageMsgStateChangedCb)(LinphoneChatMessage* msg, LinphoneChatMessageState state);
typedef void (*LinphoneChatMessageCbsMsgStateChangedCb)(LinphoneChatMessage* msg, LinphoneChatMessageState state);
/**
* File transfer receive callback prototype. This function is called by the core upon an incoming File transfer is started. This function may be call several time for the same file in case of large file.
*
* @param message #LinphoneChatMessage message from which the body is received.
* @param content #LinphoneContent incoming content information
* @param buff pointer to the received data
* @param size number of bytes to be read from buff. 0 means end of file.
*
* @param buffer #LinphoneBuffer holding the received data. Empty buffer means end of file.
*/
typedef void (*LinphoneChatMessageFileTransferRecvCb)(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size);
typedef void (*LinphoneChatMessageCbsFileTransferRecvCb)(LinphoneChatMessage *message, const LinphoneContent* content, const LinphoneBuffer *buffer);
/**
* File transfer send callback prototype. This function is called by the core upon an outgoing File transfer is started. This function is called until size is set to 0.
* <br> a #LinphoneContent with a size equal zero
*
* File transfer send callback prototype. This function is called by the core when an outgoing file transfer is started. This function is called until size is set to 0.
* @param message #LinphoneChatMessage message from which the body is received.
* @param content #LinphoneContent outgoing content
* @param buff pointer to the buffer where data chunk shall be written by the app
* @param size as input value, it represents the number of bytes expected by the framework. As output value, it means the number of bytes wrote by the application in the buffer. 0 means end of file.
*
* @param offset the offset in the file from where to get the data to be sent
* @param size the number of bytes expected by the framework
* @return A LinphoneBuffer object holding the data written by the application. An empty buffer means end of file.
*/
typedef void (*LinphoneChatMessageFileTransferSendCb)(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size);
typedef LinphoneBuffer * (*LinphoneChatMessageCbsFileTransferSendCb)(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t size);
/**
* File transfer progress indication callback prototype.
*
* @param message #LinphoneChatMessage message from which the body is received.
* @param content #LinphoneContent incoming content information
* @param offset The number of bytes sent/received since the beginning of the transfer.
* @param total The total number of bytes to be sent/received.
*/
typedef void (*LinphoneChatMessageFileTransferProgressIndicationCb)(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total);
typedef void (*LinphoneChatMessageCbsFileTransferProgressIndicationCb)(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total);
LINPHONE_PUBLIC void linphone_core_set_chat_database_path(LinphoneCore *lc, const char *path);
LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to);
@ -1430,8 +1448,23 @@ LINPHONE_PUBLIC void linphone_chat_room_send_message2(LinphoneChatRoom *cr, Linp
LINPHONE_PUBLIC void linphone_chat_room_send_chat_message(LinphoneChatRoom *cr, LinphoneChatMessage *msg);
LINPHONE_PUBLIC void linphone_chat_room_update_url(LinphoneChatRoom *cr, LinphoneChatMessage *msg);
LINPHONE_PUBLIC MSList *linphone_chat_room_get_history(LinphoneChatRoom *cr,int nb_message);
/**
* Mark all messages of the conversation as read
* @param[in] cr The #LinphoneChatRoom object corresponding to the conversation.
*/
LINPHONE_PUBLIC void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr);
/**
* Delete a message from the chat room history.
* @param[in] cr The #LinphoneChatRoom object corresponding to the conversation.
* @param[in] msg The #LinphoneChatMessage object to remove.
*/
LINPHONE_PUBLIC void linphone_chat_room_delete_message(LinphoneChatRoom *cr, LinphoneChatMessage *msg);
/**
* Delete all messages from the history
* @param[in] cr The #LinphoneChatRoom object corresponding to the conversation.
*/
LINPHONE_PUBLIC void linphone_chat_room_delete_history(LinphoneChatRoom *cr);
/**
* Gets the number of messages in a chat room.
@ -1462,6 +1495,11 @@ LINPHONE_PUBLIC void linphone_chat_room_compose(LinphoneChatRoom *cr);
*/
LINPHONE_PUBLIC bool_t linphone_chat_room_is_remote_composing(const LinphoneChatRoom *cr);
/**
* Gets the number of unread messages in the chatroom.
* @param[in] cr The "LinphoneChatRoom object corresponding to the conversation.
* @return the number of unread messages.
*/
LINPHONE_PUBLIC int linphone_chat_room_get_unread_messages_count(LinphoneChatRoom *cr);
LINPHONE_PUBLIC LinphoneCore* linphone_chat_room_get_lc(LinphoneChatRoom *cr);
LINPHONE_PUBLIC LinphoneCore* linphone_chat_room_get_core(LinphoneChatRoom *cr);
@ -1515,14 +1553,14 @@ LINPHONE_PUBLIC LinphoneChatMessageCbs * linphone_chat_message_cbs_ref(LinphoneC
LINPHONE_PUBLIC void linphone_chat_message_cbs_unref(LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void *linphone_chat_message_cbs_get_user_data(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_user_data(LinphoneChatMessageCbs *cbs, void *ud);
LINPHONE_PUBLIC LinphoneChatMessageMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageMsgStateChangedCb cb);
LINPHONE_PUBLIC LinphoneChatMessageFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferRecvCb cb);
LINPHONE_PUBLIC LinphoneChatMessageFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferSendCb cb);
LINPHONE_PUBLIC LinphoneChatMessageFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferProgressIndicationCb cb);
LINPHONE_PUBLIC LinphoneChatMessageCbsMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsMsgStateChangedCb cb);
LINPHONE_PUBLIC LinphoneChatMessageCbsFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferRecvCb cb);
LINPHONE_PUBLIC LinphoneChatMessageCbsFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferSendCb cb);
LINPHONE_PUBLIC LinphoneChatMessageCbsFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs);
LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageCbsFileTransferProgressIndicationCb cb);
/**
* @}
@ -1819,7 +1857,7 @@ typedef struct _LinphoneCoreVTable{
/**
* Instantiate a vtable with all arguments set to NULL
* @returns newly allocated vtable
* @return newly allocated vtable
*/
LINPHONE_PUBLIC LinphoneCoreVTable *linphone_core_v_table_new();
@ -1833,7 +1871,7 @@ LINPHONE_PUBLIC void linphone_core_v_table_set_user_data(LinphoneCoreVTable *tab
/**
* Gets a user data pointer in the vtable.
* @param table the vtable
* @returns the data attached to the vtable
* @return the data attached to the vtable
*/
LINPHONE_PUBLIC void* linphone_core_v_table_get_user_data(LinphoneCoreVTable *table);
@ -1841,7 +1879,7 @@ LINPHONE_PUBLIC void* linphone_core_v_table_get_user_data(LinphoneCoreVTable *ta
* Gets the current VTable.
* This is meant only to be called from a callback to be able to get the user_data associated with the vtable that called the callback.
* @param lc the linphonecore
* @returns the vtable that called the last callback
* @return the vtable that called the last callback
*/
LINPHONE_PUBLIC LinphoneCoreVTable *linphone_core_get_current_vtable(LinphoneCore *lc);
@ -1893,7 +1931,7 @@ typedef enum _LinphoneLogCollectionState {
/**
* Tells whether the linphone core log collection is enabled.
* @ingroup misc
* @returns The state of the linphone core log collection.
* @return The state of the linphone core log collection.
*/
LINPHONE_PUBLIC LinphoneLogCollectionState linphone_core_log_collection_enabled(void);
@ -1907,7 +1945,7 @@ LINPHONE_PUBLIC void linphone_core_enable_log_collection(LinphoneLogCollectionSt
/**
* Get the path where the log files will be written for log collection.
* @ingroup misc
* @returns The path where the log files will be written.
* @return The path where the log files will be written.
*/
LINPHONE_PUBLIC const char * linphone_core_get_log_collection_path(void);
@ -1921,7 +1959,7 @@ LINPHONE_PUBLIC void linphone_core_set_log_collection_path(const char *path);
/**
* Get the prefix of the filenames that will be used for log collection.
* @ingroup misc
* @returns The prefix of the filenames used for log collection.
* @return The prefix of the filenames used for log collection.
*/
LINPHONE_PUBLIC const char * linphone_core_get_log_collection_prefix(void);
@ -1935,7 +1973,7 @@ LINPHONE_PUBLIC void linphone_core_set_log_collection_prefix(const char *prefix)
/**
* Get the max file size in bytes of the files used for log collection.
* @ingroup misc
* @returns The max file size in bytes of the files used for log collection.
* @return The max file size in bytes of the files used for log collection.
*/
LINPHONE_PUBLIC int linphone_core_get_log_collection_max_file_size(void);
@ -2119,7 +2157,7 @@ LINPHONE_PUBLIC int linphone_core_terminate_call(LinphoneCore *lc, LinphoneCall
* @param[in] lc #LinphoneCore object.
* @param[in] call The #LinphoneCall to redirect.
* @param[in] redirect_uri The URI to redirect the call to.
* @returns 0 if successful, -1 on error.
* @return 0 if successful, -1 on error.
* @ingroup call_control
*/
LINPHONE_PUBLIC int linphone_core_redirect_call(LinphoneCore *lc, LinphoneCall *call, const char *redirect_uri);
@ -2225,7 +2263,7 @@ LINPHONE_PUBLIC void linphone_core_enable_dns_srv(LinphoneCore *lc, bool_t enabl
/**
* Tells whether DNS SRV resolution is enabled.
* @param[in] lc #LinphoneCore object.
* @returns TRUE if DNS SRV resolution is enabled, FALSE if disabled.
* @return TRUE if DNS SRV resolution is enabled, FALSE if disabled.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_dns_srv_enabled(const LinphoneCore *lc);
@ -2243,7 +2281,7 @@ LINPHONE_PUBLIC int linphone_core_set_video_codecs(LinphoneCore *lc, MSList *cod
* Tells whether the specified payload type is enabled.
* @param[in] lc #LinphoneCore object.
* @param[in] pt The #LinphonePayloadType we want to know is enabled or not.
* @returns TRUE if the payload type is enabled, FALSE if disabled.
* @return TRUE if the payload type is enabled, FALSE if disabled.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const LinphonePayloadType *pt);
@ -2252,7 +2290,7 @@ LINPHONE_PUBLIC bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, cons
* Tells whether the specified payload type represents a variable bitrate codec.
* @param[in] lc #LinphoneCore object.
* @param[in] pt The #LinphonePayloadType we want to know
* @returns TRUE if the payload type represents a VBR codec, FALSE if disabled.
* @return TRUE if the payload type represents a VBR codec, FALSE if disabled.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_payload_type_is_vbr(LinphoneCore *lc, const LinphonePayloadType *pt);
@ -2307,8 +2345,19 @@ LINPHONE_PUBLIC int linphone_core_enable_payload_type(LinphoneCore *lc, Linphone
*/
LINPHONE_PUBLIC LinphonePayloadType* linphone_core_find_payload_type(LinphoneCore* lc, const char* type, int rate, int channels) ;
/**
* @ingroup media_parameters
* Returns the payload type number assigned for this codec.
**/
LINPHONE_PUBLIC int linphone_core_get_payload_type_number(LinphoneCore *lc, const PayloadType *pt);
/**
* @ingroup media_parameters
* Force a number for a payload type. The LinphoneCore does payload type number assignment automatically. THis function is to be used mainly for tests, in order
* to override the automatic assignment mechanism.
**/
LINPHONE_PUBLIC void linphone_core_set_payload_type_number(LinphoneCore *lc, PayloadType *pt, int number);
LINPHONE_PUBLIC const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt);
LINPHONE_PUBLIC bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt);
@ -2377,7 +2426,7 @@ LINPHONE_PUBLIC void linphone_core_enable_audio_adaptive_jittcomp(LinphoneCore *
/**
* Tells whether the audio adaptive jitter compensation is enabled.
* @param[in] lc #LinphoneCore object
* @returns TRUE if the audio adaptive jitter compensation is enabled, FALSE otherwise.
* @return TRUE if the audio adaptive jitter compensation is enabled, FALSE otherwise.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_audio_adaptive_jittcomp_enabled(LinphoneCore *lc);
@ -2397,7 +2446,7 @@ LINPHONE_PUBLIC void linphone_core_enable_video_adaptive_jittcomp(LinphoneCore *
/**
* Tells whether the video adaptive jitter compensation is enabled.
* @param[in] lc #LinphoneCore object
* @returns TRUE if the video adaptive jitter compensation is enabled, FALSE otherwise.
* @return TRUE if the video adaptive jitter compensation is enabled, FALSE otherwise.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_video_adaptive_jittcomp_enabled(LinphoneCore *lc);
@ -2476,7 +2525,7 @@ LINPHONE_PUBLIC void linphone_core_set_stun_server(LinphoneCore *lc, const char
/**
* Get the STUN server address being used.
* @param[in] lc #LinphoneCore object
* @returns The STUN server address being used.
* @return The STUN server address being used.
* @ingroup network_parameters
*/
LINPHONE_PUBLIC const char * linphone_core_get_stun_server(const LinphoneCore *lc);
@ -2521,7 +2570,7 @@ LINPHONE_PUBLIC void linphone_core_set_nat_address(LinphoneCore *lc, const char
/**
* Get the public IP address of NAT being used.
* @param[in] lc #LinphoneCore object.
* @returns The public IP address of NAT being used.
* @return The public IP address of NAT being used.
* @ingroup network_parameters
*/
LINPHONE_PUBLIC const char *linphone_core_get_nat_address(const LinphoneCore *lc);
@ -2537,7 +2586,7 @@ LINPHONE_PUBLIC void linphone_core_set_firewall_policy(LinphoneCore *lc, Linphon
/**
* Get the policy that is used to pass through firewalls.
* @param[in] lc #LinphoneCore object.
* @returns The #LinphoneFirewallPolicy that is being used.
* @return The #LinphoneFirewallPolicy that is being used.
* @ingroup network_parameters
*/
LINPHONE_PUBLIC LinphoneFirewallPolicy linphone_core_get_firewall_policy(const LinphoneCore *lc);
@ -2607,7 +2656,7 @@ LINPHONE_PUBLIC void linphone_core_enable_echo_limiter(LinphoneCore *lc, bool_t
/**
* Tells whether echo limiter is enabled.
* @param[in] lc #LinphoneCore object.
* @returns TRUE if the echo limiter is enabled, FALSE otherwise.
* @return TRUE if the echo limiter is enabled, FALSE otherwise.
* @ingroup media_parameters
**/
LINPHONE_PUBLIC bool_t linphone_core_echo_limiter_enabled(const LinphoneCore *lc);
@ -2637,7 +2686,7 @@ LINPHONE_PUBLIC void linphone_core_enable_mic(LinphoneCore *lc, bool_t enable);
/**
* Tells whether the microphone is enabled.
* @param[in] lc #LinphoneCore object
* @returns TRUE if the microphone is enabled, FALSE if disabled.
* @return TRUE if the microphone is enabled, FALSE if disabled.
* @ingroup media_parameters
**/
LINPHONE_PUBLIC bool_t linphone_core_mic_enabled(LinphoneCore *lc);
@ -2674,7 +2723,7 @@ LINPHONE_PUBLIC void linphone_core_clear_call_logs(LinphoneCore *lc);
* Get the number of missed calls.
* Once checked, this counter can be reset with linphone_core_reset_missed_calls_count().
* @param[in] lc #LinphoneCore object.
* @returns The number of missed calls.
* @return The number of missed calls.
**/
LINPHONE_PUBLIC int linphone_core_get_missed_calls_count(LinphoneCore *lc);
@ -2765,7 +2814,7 @@ LINPHONE_PUBLIC void linphone_core_enable_video_source_reuse(LinphoneCore* lc, b
/**
* Tells whether video capture is enabled.
* @param[in] lc #LinphoneCore object.
* @returns TRUE if video capture is enabled, FALSE if disabled.
* @return TRUE if video capture is enabled, FALSE if disabled.
* @ingroup media_parameters
**/
LINPHONE_PUBLIC bool_t linphone_core_video_capture_enabled(LinphoneCore *lc);
@ -2773,7 +2822,7 @@ LINPHONE_PUBLIC bool_t linphone_core_video_capture_enabled(LinphoneCore *lc);
/**
* Tells whether video display is enabled.
* @param[in] lc #LinphoneCore object.
* @returns TRUE if video display is enabled, FALSE if disabled.
* @return TRUE if video display is enabled, FALSE if disabled.
* @ingroup media_parameters
**/
LINPHONE_PUBLIC bool_t linphone_core_video_display_enabled(LinphoneCore *lc);
@ -2791,12 +2840,13 @@ LINPHONE_PUBLIC void linphone_core_set_preferred_video_size(LinphoneCore *lc, MS
LINPHONE_PUBLIC void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVideoSize vsize);
LINPHONE_PUBLIC void linphone_core_set_preview_video_size_by_name(LinphoneCore *lc, const char *name);
LINPHONE_PUBLIC MSVideoSize linphone_core_get_preview_video_size(const LinphoneCore *lc);
LINPHONE_PUBLIC MSVideoSize linphone_core_get_current_preview_video_size(const LinphoneCore *lc);
LINPHONE_PUBLIC MSVideoSize linphone_core_get_preferred_video_size(const LinphoneCore *lc);
/**
* Get the name of the current preferred video size for sending.
* @param[in] lc #LinphoneCore object.
* @returns A string containing the name of the current preferred video size (to be freed with ms_free()).
* @return A string containing the name of the current preferred video size (to be freed with ms_free()).
*/
LINPHONE_PUBLIC char * linphone_core_get_preferred_video_size_name(const LinphoneCore *lc);
LINPHONE_PUBLIC void linphone_core_set_preferred_video_size_by_name(LinphoneCore *lc, const char *name);
@ -2836,7 +2886,7 @@ LINPHONE_PUBLIC int linphone_core_set_static_picture(LinphoneCore *lc, const cha
/**
* Get the path to the image file streamed when "Static picture" is set as the video device.
* @param[in] lc #LinphoneCore object.
* @returns The path to the image file streamed when "Static picture" is set as the video device.
* @return The path to the image file streamed when "Static picture" is set as the video device.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC const char *linphone_core_get_static_picture(LinphoneCore *lc);
@ -2993,7 +3043,7 @@ LINPHONE_PUBLIC void linphone_core_set_zrtp_secrets_file(LinphoneCore *lc, const
/**
* Get the path to the file storing the zrtp secrets cache.
* @param[in] lc #LinphoneCore object.
* @returns The path to the file storing the zrtp secrets cache.
* @return The path to the file storing the zrtp secrets cache.
* @ingroup initializing
*/
LINPHONE_PUBLIC const char *linphone_core_get_zrtp_secrets_file(LinphoneCore *lc);
@ -3042,7 +3092,7 @@ LINPHONE_PUBLIC bool_t linphone_core_media_encryption_supported(const LinphoneCo
* Choose the media encryption policy to be used for RTP packets.
* @param[in] lc #LinphoneCore object.
* @param[in] menc The media encryption policy to be used.
* @returns 0 if successful, any other value otherwise.
* @return 0 if successful, any other value otherwise.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC int linphone_core_set_media_encryption(LinphoneCore *lc, LinphoneMediaEncryption menc);
@ -3050,7 +3100,7 @@ LINPHONE_PUBLIC int linphone_core_set_media_encryption(LinphoneCore *lc, Linphon
/**
* Get the media encryption policy being used for RTP packets.
* @param[in] lc #LinphoneCore object.
* @returns The media encryption policy being used.
* @return The media encryption policy being used.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC LinphoneMediaEncryption linphone_core_get_media_encryption(LinphoneCore *lc);
@ -3058,7 +3108,7 @@ LINPHONE_PUBLIC LinphoneMediaEncryption linphone_core_get_media_encryption(Linph
/**
* Get behaviour when encryption parameters negociation fails on outgoing call.
* @param[in] lc #LinphoneCore object.
* @returns TRUE means the call will fail; FALSE means an INVITE will be resent with encryption disabled.
* @return TRUE means the call will fail; FALSE means an INVITE will be resent with encryption disabled.
* @ingroup media_parameters
*/
LINPHONE_PUBLIC bool_t linphone_core_is_media_encryption_mandatory(LinphoneCore *lc);
@ -3187,6 +3237,7 @@ LINPHONE_PUBLIC void linphone_core_set_tone(LinphoneCore *lc, LinphoneToneID id,
* Globaly set an http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml. This value can also be set for a dedicated account using #linphone_proxy_config_set_file_transfer_server
* @param[in] core #LinphoneCore to be modified
* @param[in] server_url URL of the file server like https://file.linphone.org/upload.php
* @ingroup misc
* */
LINPHONE_PUBLIC void linphone_core_set_file_transfer_server(LinphoneCore *core, const char * server_url);
@ -3194,6 +3245,7 @@ LINPHONE_PUBLIC void linphone_core_set_file_transfer_server(LinphoneCore *core,
* Get the globaly set http file transfer server to be used for content type application/vnd.gsma.rcs-ft-http+xml.
* @param[in] core #LinphoneCore from which to get the server_url
* @return URL of the file server like https://file.linphone.org/upload.php
* @ingroup misc
* */
LINPHONE_PUBLIC const char * linphone_core_get_file_transfer_server(LinphoneCore *core);

View file

@ -170,9 +170,9 @@ jobject getProxy(JNIEnv *env, LinphoneProxyConfig *proxy, jobject core){
jobject jobj=0;
if (proxy!=NULL){
jclass proxyClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneProxyConfigImpl"));
jclass proxyClass = (jclass)env->FindClass("org/linphone/core/LinphoneProxyConfigImpl");
jmethodID proxyCtrId = env->GetMethodID(proxyClass,"<init>", "(Lorg/linphone/core/LinphoneCoreImpl;J)V");
void *up=linphone_proxy_config_get_user_data(proxy);
if (up==NULL){
@ -188,7 +188,7 @@ jobject getProxy(JNIEnv *env, LinphoneProxyConfig *proxy, jobject core){
linphone_proxy_config_set_user_data(proxy,(void*)env->NewWeakGlobalRef(jobj));
}
}
env->DeleteGlobalRef(proxyClass);
env->DeleteLocalRef(proxyClass);
}
return jobj;
}
@ -197,9 +197,9 @@ jobject getCall(JNIEnv *env, LinphoneCall *call){
jobject jobj=0;
if (call!=NULL){
jclass callClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCallImpl"));
jclass callClass = (jclass)env->FindClass("org/linphone/core/LinphoneCallImpl");
jmethodID callCtrId = env->GetMethodID(callClass,"<init>", "(J)V");
void *up=linphone_call_get_user_pointer(call);
if (up==NULL){
@ -210,7 +210,7 @@ jobject getCall(JNIEnv *env, LinphoneCall *call){
}else{
jobj=(jobject)up;
}
env->DeleteGlobalRef(callClass);
env->DeleteLocalRef(callClass);
}
return jobj;
}
@ -219,9 +219,9 @@ jobject getChatMessage(JNIEnv *env, LinphoneChatMessage *msg){
jobject jobj = 0;
if (msg != NULL){
jclass chatMessageClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessageImpl"));
jclass chatMessageClass = (jclass)env->FindClass("org/linphone/core/LinphoneChatMessageImpl");
jmethodID chatMessageCtrId = env->GetMethodID(chatMessageClass,"<init>", "(J)V");
void *up = linphone_chat_message_get_user_data(msg);
if (up == NULL) {
@ -231,7 +231,7 @@ jobject getChatMessage(JNIEnv *env, LinphoneChatMessage *msg){
} else {
jobj = (jobject)up;
}
env->DeleteGlobalRef(chatMessageClass);
env->DeleteLocalRef(chatMessageClass);
}
return jobj;
}
@ -240,14 +240,14 @@ jobject getEvent(JNIEnv *env, LinphoneEvent *lev){
if (lev==NULL) return NULL;
jobject jev=(jobject)linphone_event_get_user_data(lev);
if (jev==NULL){
jclass linphoneEventClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneEventImpl"));
jclass linphoneEventClass = (jclass)env->FindClass("org/linphone/core/LinphoneEventImpl");
jmethodID linphoneEventCtrId = env->GetMethodID(linphoneEventClass,"<init>", "(J)V");
jev=env->NewObject(linphoneEventClass,linphoneEventCtrId,(jlong)linphone_event_ref(lev));
jev=env->NewGlobalRef(jev);
linphone_event_set_user_data(lev,jev);
env->DeleteGlobalRef(linphoneEventClass);
env->DeleteLocalRef(linphoneEventClass);
}
return jev;
}
@ -257,9 +257,9 @@ public:
LinphoneCoreData(JNIEnv *env, jobject lc, LinphoneCoreVTable *vTable, jobject alistener) {
core = env->NewGlobalRef(lc);
listener = env->NewGlobalRef(alistener);
memset(vTable, 0, sizeof(LinphoneCoreVTable));
listenerClass = (jclass)env->NewGlobalRef(env->GetObjectClass(alistener));
/*displayStatus(LinphoneCore lc,String message);*/
@ -277,7 +277,7 @@ public:
if (globalStateId) {
vTable->global_state_changed = globalStateChange;
}
/*registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, LinphoneCore.RegistrationState cstate, String smessage);*/
registrationStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$RegistrationState"));
registrationStateFromIntId = env->GetStaticMethodID(registrationStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$RegistrationState;");
@ -286,7 +286,7 @@ public:
if (registrationStateId) {
vTable->registration_state_changed = registrationStateChange;
}
/*callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State cstate,String message);*/
callStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCall$State"));
callStateFromIntId = env->GetStaticMethodID(callStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCall$State;");
@ -295,7 +295,7 @@ public:
if (callStateId) {
vTable->call_state_changed = callStateChange;
}
transferStateId = env->GetMethodID(listenerClass,"transferState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneCall$State;)V");
env->ExceptionClear();
if (transferStateId) {
@ -348,25 +348,25 @@ public:
if (textReceivedId) {
vTable->text_received = text_received;
}
messageReceivedId = env->GetMethodID(listenerClass,"messageReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;Lorg/linphone/core/LinphoneChatMessage;)V");
env->ExceptionClear();
if (messageReceivedId) {
vTable->message_received = message_received;
}
isComposingReceivedId = env->GetMethodID(listenerClass,"isComposingReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;)V");
env->ExceptionClear();
if (isComposingReceivedId) {
vTable->is_composing_received = is_composing_received;
}
dtmfReceivedId = env->GetMethodID(listenerClass,"dtmfReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;I)V");
env->ExceptionClear();
if (dtmfReceivedId) {
vTable->dtmf_received = dtmf_received;
}
infoReceivedId = env->GetMethodID(listenerClass,"infoReceived", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneInfoMessage;)V");
env->ExceptionClear();
if (infoReceivedId) {
@ -380,7 +380,7 @@ public:
if (subscriptionStateId) {
vTable->subscription_state_changed = subscriptionStateChanged;
}
publishStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/PublishState"));
publishStateFromIntId = env->GetStaticMethodID(publishStateClass,"fromInt","(I)Lorg/linphone/core/PublishState;");
publishStateId = env->GetMethodID(listenerClass,"publishStateChanged", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Lorg/linphone/core/PublishState;)V");
@ -388,7 +388,7 @@ public:
if (publishStateId) {
vTable->publish_state_changed = publishStateChanged;
}
notifyRecvId = env->GetMethodID(listenerClass,"notifyReceived", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Ljava/lang/String;Lorg/linphone/core/LinphoneContent;)V");
env->ExceptionClear();
if (notifyRecvId) {
@ -408,7 +408,7 @@ public:
if (fileTransferProgressIndicationId) {
vTable->file_transfer_progress_indication = fileTransferProgressIndication;
}
fileTransferSendId = env->GetMethodID(listenerClass, "fileTransferSend", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;Ljava/nio/ByteBuffer;I)I");
env->ExceptionClear();
if (fileTransferSendId) {
@ -420,10 +420,23 @@ public:
if (fileTransferRecvId) {
vTable->file_transfer_recv = fileTransferRecv;
}
logCollectionUploadStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$LogCollectionUploadState"));
logCollectionUploadStateFromIntId = env->GetStaticMethodID(logCollectionUploadStateClass, "fromInt", "(I)Lorg/linphone/core/LinphoneCore$LogCollectionUploadState;");
logCollectionUploadProgressId = env->GetMethodID(listenerClass, "uploadProgressIndication", "(Lorg/linphone/core/LinphoneCore;II)V");
env->ExceptionClear();
if (logCollectionUploadProgressId) {
vTable->log_collection_upload_progress_indication = logCollectionUploadProgressIndication;
}
logCollectionUploadStateId = env->GetMethodID(listenerClass, "uploadStateChanged", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$LogCollectionUploadState;Ljava/lang/String;)V");
env->ExceptionClear();
if (logCollectionUploadStateId) {
vTable->log_collection_upload_state_changed = logCollectionUploadStateChange;
}
chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State"));
chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;");
proxyClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneProxyConfigImpl"));
proxyCtrId = env->GetMethodID(proxyClass,"<init>", "(Lorg/linphone/core/LinphoneCoreImpl;J)V");
@ -479,6 +492,7 @@ public:
env->DeleteGlobalRef(linphoneEventClass);
env->DeleteGlobalRef(subscriptionStateClass);
env->DeleteGlobalRef(subscriptionDirClass);
env->DeleteGlobalRef(logCollectionUploadStateClass);
}
jobject core;
jobject listener;
@ -566,8 +580,13 @@ public:
jmethodID fileTransferSendId;
jmethodID fileTransferRecvId;
jclass logCollectionUploadStateClass;
jmethodID logCollectionUploadStateId;
jmethodID logCollectionUploadStateFromIntId;
jmethodID logCollectionUploadProgressId;
LinphoneCoreVTable vTable;
static void displayStatusCb(LinphoneCore *lc, const char *message) {
JNIEnv *env = 0;
jint result = jvm->AttachCurrentThread(&env,NULL);
@ -577,7 +596,11 @@ public:
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
env->CallVoidMethod(lcData->listener,lcData->displayStatusId,lcData->core,message ? env->NewStringUTF(message) : NULL);
jstring msg = message ? env->NewStringUTF(message) : NULL;
env->CallVoidMethod(lcData->listener,lcData->displayStatusId,lcData->core,msg);
if (msg) {
env->DeleteLocalRef(msg);
}
}
static void authInfoRequested(LinphoneCore *lc, const char *realm, const char *username, const char *domain) {
JNIEnv *env = 0;
@ -588,12 +611,24 @@ public:
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
jstring r = realm ? env->NewStringUTF(realm) : NULL;
jstring u = username ? env->NewStringUTF(username) : NULL;
jstring d = domain ? env->NewStringUTF(domain) : NULL;
env->CallVoidMethod(lcData->listener,
lcData->authInfoRequestedId,
lcData->core,
realm ? env->NewStringUTF(realm):NULL,
username ? env->NewStringUTF(username) : NULL,
domain ? env->NewStringUTF(domain) : NULL);
r,
u,
d);
if (r) {
env->DeleteLocalRef(r);
}
if (u) {
env->DeleteLocalRef(u);
}
if (d) {
env->DeleteLocalRef(d);
}
}
static void globalStateChange(LinphoneCore *lc, LinphoneGlobalState gstate,const char* message) {
JNIEnv *env = 0;
@ -604,11 +639,15 @@ public:
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
jstring msg = message ? env->NewStringUTF(message) : NULL;
env->CallVoidMethod(lcData->listener
,lcData->globalStateId
,lcData->core
,env->CallStaticObjectMethod(lcData->globalStateClass,lcData->globalStateFromIntId,(jint)gstate),
message ? env->NewStringUTF(message) : NULL);
msg);
if (msg) {
env->DeleteLocalRef(msg);
}
}
static void registrationStateChange(LinphoneCore *lc, LinphoneProxyConfig* proxy,LinphoneRegistrationState state,const char* message) {
JNIEnv *env = 0;
@ -620,12 +659,16 @@ public:
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
jstring msg = message ? env->NewStringUTF(message) : NULL;
env->CallVoidMethod(lcData->listener
,lcData->registrationStateId
,lcData->core
,(jproxy=getProxy(env,proxy,lcData->core))
,env->CallStaticObjectMethod(lcData->registrationStateClass,lcData->registrationStateFromIntId,(jint)state),
message ? env->NewStringUTF(message) : NULL);
msg);
if (msg) {
env->DeleteLocalRef(msg);
}
}
static void callStateChange(LinphoneCore *lc, LinphoneCall* call,LinphoneCallState state,const char* message) {
@ -638,16 +681,20 @@ public:
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
jstring msg = message ? env->NewStringUTF(message) : NULL;
env->CallVoidMethod(lcData->listener
,lcData->callStateId
,lcData->core
,(jcall=getCall(env,call))
,env->CallStaticObjectMethod(lcData->callStateClass,lcData->callStateFromIntId,(jint)state),
message ? env->NewStringUTF(message) : NULL);
if (state==LinphoneCallReleased){
msg);
if (state==LinphoneCallReleased) {
linphone_call_set_user_pointer(call,NULL);
env->DeleteGlobalRef(jcall);
}
if (msg) {
env->DeleteLocalRef(msg);
}
}
static void callEncryptionChange(LinphoneCore *lc, LinphoneCall* call, bool_t encrypted,const char* authentication_token) {
JNIEnv *env = 0;
@ -763,17 +810,22 @@ public:
ms_error("cannot attach VM");
return;
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
env->CallVoidMethod(lcData->listener
,lcData->ecCalibrationStatusId
,lcData->core
,env->CallStaticObjectMethod(lcData->ecCalibratorStatusClass,lcData->ecCalibratorStatusFromIntId,(jint)status)
,delay_ms
,data ? data : NULL);
if (data != NULL &&status !=LinphoneEcCalibratorInProgress ) {
//final state, releasing global ref
env->DeleteGlobalRef((jobject)data);
LinphoneCoreVTable *table = (LinphoneCoreVTable*) data;
if (table) {
LinphoneCoreData* lcData = (LinphoneCoreData*) linphone_core_v_table_get_user_data(table);
if (lcData->ecCalibrationStatusId) {
jobject state = env->CallStaticObjectMethod(lcData->ecCalibratorStatusClass, lcData->ecCalibratorStatusFromIntId, (jint)status);
env->CallVoidMethod(lcData->listener
,lcData->ecCalibrationStatusId
,lcData->core
,state
,delay_ms
,NULL);
}
if (status != LinphoneEcCalibratorInProgress) {
linphone_core_v_table_destroy(table);
}
}
}
@ -968,6 +1020,40 @@ public:
jbytes,
size);
}
static void logCollectionUploadProgressIndication(LinphoneCore *lc, size_t offset, size_t total) {
JNIEnv *env = 0;
jint result = jvm->AttachCurrentThread(&env,NULL);
if (result != 0) {
ms_error("cannot attach VM");
return;
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
env->CallVoidMethod(lcData->listener
,lcData->logCollectionUploadProgressId
,lcData->core
,(jlong)offset
,(jlong)total);
}
static void logCollectionUploadStateChange(LinphoneCore *lc, LinphoneCoreLogCollectionUploadState state, const char *info) {
JNIEnv *env = 0;
jint result = jvm->AttachCurrentThread(&env,NULL);
if (result != 0) {
ms_error("cannot attach VM");
return;
}
LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc);
LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table);
jstring msg = info ? env->NewStringUTF(info) : NULL;
env->CallVoidMethod(lcData->listener
,lcData->logCollectionUploadStateId
,lcData->core
,env->CallStaticObjectMethod(lcData->logCollectionUploadStateClass,lcData->logCollectionUploadStateFromIntId,(jint)state),
msg);
if (msg) {
env->DeleteLocalRef(msg);
}
}
};
extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv* env
@ -979,7 +1065,7 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv*
const char* userConfig = juserConfig?env->GetStringUTFChars(juserConfig, NULL):NULL;
const char* factoryConfig = jfactoryConfig?env->GetStringUTFChars(jfactoryConfig, NULL):NULL;
LinphoneCoreVTable *vTable = linphone_core_v_table_new();
LinphoneCoreData* ldata = new LinphoneCoreData(env, thiz, vTable, jlistener);
linphone_core_v_table_set_user_data(vTable, ldata);
@ -1032,7 +1118,37 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_addListener(JNIEnv* env,
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeListener(JNIEnv* env, jobject thiz, jlong lc, jobject jlistener) {
//TODO
MSList* iterator;
LinphoneCore *core = (LinphoneCore*)lc;
jobject listener = env->NewGlobalRef(jlistener);
for (iterator = core->vtables; iterator != NULL; iterator = iterator->next) {
LinphoneCoreVTable *vTable = (LinphoneCoreVTable*)(iterator->data);
if (vTable) {
LinphoneCoreData *data = (LinphoneCoreData*) linphone_core_v_table_get_user_data(vTable);
if (data && env->IsSameObject(data->listener, listener)) {
linphone_core_remove_listener(core, vTable);
linphone_core_v_table_destroy(vTable);
break;
}
}
}
env->DeleteGlobalRef(listener);
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_uploadLogCollection(JNIEnv* env, jobject thiz, jlong lc) {
LinphoneCore *core = (LinphoneCore*)lc;
linphone_core_upload_log_collection(core);
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_enableLogCollection(JNIEnv* env, jclass cls, jboolean enable) {
linphone_core_enable_log_collection(enable ? LinphoneLogCollectionEnabledWithoutPreviousLogHandler : LinphoneLogCollectionDisabled);
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setLogCollectionPath(JNIEnv* env, jclass cls, jstring jpath) {
const char* path = env->GetStringUTFChars(jpath, NULL);
linphone_core_set_log_collection_path(path);
env->ReleaseStringUTFChars(jpath, path);
}
extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_migrateToMultiTransport(JNIEnv* env
@ -1102,7 +1218,7 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setDefaultProxyConfig( J
,jlong pc) {
linphone_core_set_default_proxy((LinphoneCore*)lc,(LinphoneProxyConfig*)pc);
}
extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_getDefaultProxyConfig(JNIEnv* env
,jobject thiz
,jlong lc) {
@ -1713,11 +1829,11 @@ extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_startEchoCalibration(JNI
,jobject thiz
,jlong lc
,jobject data) {
return (jint)linphone_core_start_echo_calibration((LinphoneCore*)lc
, LinphoneCoreData::ecCalibrationStatus
, NULL
, NULL
, data?env->NewGlobalRef(data):NULL);
LinphoneCoreVTable *vTable = linphone_core_v_table_new();
LinphoneCoreData* ldata = new LinphoneCoreData(env, thiz, vTable, data);
linphone_core_v_table_set_user_data(vTable, ldata);
return (jint)linphone_core_start_echo_calibration((LinphoneCore*)lc, ldata->ecCalibrationStatus, NULL, NULL, vTable);
}
@ -2231,6 +2347,12 @@ extern "C" jint Java_org_linphone_core_LinphoneAddressImpl_getTransport(JNIEnv*
LinphoneTransportType transporttype = linphone_address_get_transport((LinphoneAddress*)ptr);
return (jint)transporttype;
}
extern "C" jint Java_org_linphone_core_LinphoneAddressImpl_getPort(JNIEnv* env
,jobject thiz
,jlong ptr) {
int port = linphone_address_get_port((LinphoneAddress*)ptr);
return (jint)port;
}
extern "C" jstring Java_org_linphone_core_LinphoneAddressImpl_toString(JNIEnv* env
,jobject thiz
,jlong ptr) {
@ -2277,6 +2399,12 @@ extern "C" void Java_org_linphone_core_LinphoneAddressImpl_setTransport(JNIEnv*
,jint jtransport) {
linphone_address_set_transport((LinphoneAddress*)address, (LinphoneTransportType) jtransport);
}
extern "C" void Java_org_linphone_core_LinphoneAddressImpl_setPort(JNIEnv* env
,jobject thiz
,jlong address
,jint jport) {
linphone_address_set_port((LinphoneAddress*)address, (LinphoneTransportType) jport);
}
//CallLog
extern "C" jlong Java_org_linphone_core_LinphoneCallLogImpl_getFrom(JNIEnv* env
@ -2487,7 +2615,6 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransferState(
*/
JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransfererCall(JNIEnv *env, jobject jCall, jlong callptr){
LinphoneCall *call=(LinphoneCall*)callptr;
LinphoneCore *lc=linphone_call_get_core(call);
LinphoneCall *ret=linphone_call_get_transferer_call(call);
return getCall(env,ret);
}
@ -2499,7 +2626,6 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransfererC
*/
JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransferTargetCall(JNIEnv *env, jobject jCall, jlong callptr){
LinphoneCall *call=(LinphoneCall*)callptr;
LinphoneCore *lc=linphone_call_get_core(call);
LinphoneCall *ret=linphone_call_get_transfer_target_call(call);
return getCall(env,ret);
}
@ -2831,11 +2957,13 @@ extern "C" jbyteArray Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNI
,jobject thiz
,jlong ptr) {
const char *message = linphone_chat_message_get_text((LinphoneChatMessage*)ptr);
size_t length = strlen(message);
jbyteArray array = env->NewByteArray(length);
env->SetByteArrayRegion(array, 0, length, (const jbyte*)message);
return array;
if (message){
size_t length = strlen(message);
jbyteArray array = env->NewByteArray(length);
env->SetByteArrayRegion(array, 0, length, (const jbyte*)message);
return array;
}
return NULL;
}
extern "C" jint Java_org_linphone_core_LinphoneChatMessageImpl_getReason(JNIEnv* env
@ -2976,8 +3104,7 @@ static void chat_room_impl_callback(LinphoneChatMessage* msg, LinphoneChatMessag
jclass clazz = (jclass) env->GetObjectClass(listener);
jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V");
jobject jmessage=(jobject)linphone_chat_message_get_user_data(msg);
LinphoneCore *lc = linphone_chat_room_get_lc(linphone_chat_message_get_chat_room(msg));
jclass chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State"));
jmethodID chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;");
env->CallVoidMethod(
@ -3060,6 +3187,19 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setDeviceRotation(JNIEnv
linphone_core_set_device_rotation((LinphoneCore*)lc,rotation);
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setRemoteRingbackTone(JNIEnv *env, jobject thiz, jlong lc, jstring jtone){
const char* tone = NULL;
if (jtone) tone=env->GetStringUTFChars(jtone, NULL);
linphone_core_set_remote_ringback_tone((LinphoneCore*)lc,tone);
if (tone) env->ReleaseStringUTFChars(jtone,tone);
}
extern "C" jstring Java_org_linphone_core_LinphoneCoreImpl_getRemoteRingbackTone(JNIEnv *env, jobject thiz, jlong lc){
const char *ret= linphone_core_get_remote_ringback_tone((LinphoneCore*)lc);
if (ret==NULL) return NULL;
jstring jvalue =env->NewStringUTF(ret);
return jvalue;
}
extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setFirewallPolicy(JNIEnv *env, jobject thiz, jlong lc, jint enum_value){
linphone_core_set_firewall_policy((LinphoneCore*)lc,(LinphoneFirewallPolicy)enum_value);

View file

@ -261,14 +261,14 @@ LINPHONE_PUBLIC void linphone_friend_set_ref_key(LinphoneFriend *lf, const char
/**
* Get the reference key of a friend.
* @param[in] lf #LinphoneFriend object.
* @returns The reference key of the friend.
* @return The reference key of the friend.
**/
LINPHONE_PUBLIC const char *linphone_friend_get_ref_key(const LinphoneFriend *lf);
/**
* Check that the given friend is in a friend list.
* @param[in] lf #LinphoneFriend object.
* @returns TRUE if the friend is in a friend list, FALSE otherwise.
* @return TRUE if the friend is in a friend list, FALSE otherwise.
**/
LINPHONE_PUBLIC bool_t linphone_friend_in_list(const LinphoneFriend *lf);
@ -372,7 +372,7 @@ LINPHONE_PUBLIC void linphone_core_notify_all_friends(LinphoneCore *lc, Linphone
* Search a LinphoneFriend by its address.
* @param[in] lc #LinphoneCore object.
* @param[in] addr The address to use to search the friend.
* @returns The #LinphoneFriend object corresponding to the given address.
* @return The #LinphoneFriend object corresponding to the given address.
* @deprecated use linphone_core_find_friend() instead.
*/
LINPHONE_PUBLIC LinphoneFriend *linphone_core_get_friend_by_address(const LinphoneCore *lc, const char *addr);
@ -381,7 +381,7 @@ LINPHONE_PUBLIC LinphoneFriend *linphone_core_get_friend_by_address(const Linpho
* Search a LinphoneFriend by its address.
* @param[in] lc #LinphoneCore object.
* @param[in] addr The address to use to search the friend.
* @returns The #LinphoneFriend object corresponding to the given address.
* @return The #LinphoneFriend object corresponding to the given address.
*/
LINPHONE_PUBLIC LinphoneFriend *linphone_core_find_friend(const LinphoneCore *lc, const LinphoneAddress *addr);
@ -389,7 +389,7 @@ LINPHONE_PUBLIC LinphoneFriend *linphone_core_find_friend(const LinphoneCore *lc
* Search a LinphoneFriend by its reference key.
* @param[in] lc #LinphoneCore object.
* @param[in] key The reference key to use to search the friend.
* @returns The #LinphoneFriend object corresponding to the given reference key.
* @return The #LinphoneFriend object corresponding to the given reference key.
*/
LINPHONE_PUBLIC LinphoneFriend *linphone_core_get_friend_by_ref_key(const LinphoneCore *lc, const char *key);

View file

@ -200,7 +200,7 @@ typedef struct _LinphonePresenceNote LinphonePresenceNote;
* Creates a presence model specifying an activity.
* @param[in] activity The activity to set for the created presence model.
* @param[in] description An additional description of the activity (mainly useful for the 'other' activity). Set it to NULL to not add a description.
* @returns The created presence model, or NULL if an error occured.
* @return The created presence model, or NULL if an error occured.
* @see linphone_presence_model_new
* @see linphone_presence_model_new_with_activity_and_note
*
@ -214,7 +214,7 @@ LINPHONE_PUBLIC LinphonePresenceModel * linphone_presence_model_new_with_activit
* @param[in] description An additional description of the activity (mainly useful for the 'other' activity). Set it to NULL to not add a description.
* @param[in] note An additional note giving additional information about the contact presence.
* @param[in] lang The language the note is written in. It can be set to NULL in order to not specify the language of the note.
* @returns The created presence model, or NULL if an error occured.
* @return The created presence model, or NULL if an error occured.
* @see linphone_presence_model_new_with_activity
* @see linphone_presence_model_new_with_activity_and_note
*
@ -344,7 +344,7 @@ LINPHONE_PUBLIC int linphone_presence_model_clear_notes(LinphonePresenceModel *m
/**
* Creates a default presence model.
* @returns The created presence model, NULL on error.
* @return The created presence model, NULL on error.
* @see linphone_presence_model_new_with_activity
* @see linphone_presence_model_new_with_activity_and_note
*
@ -422,7 +422,7 @@ LINPHONE_PUBLIC int linphone_presence_model_clear_persons(LinphonePresenceModel
* @param[in] id The id of the presence service to be created. Can be NULL to generate it automatically.
* @param[in] basic_status The #LinphonePresenceBasicStatus to set for the #LinphonePresenceService object.
* @param[in] contact The contact string to set.
* @returns The created presence service, NULL on error.
* @return The created presence service, NULL on error.
*
* The created presence service has the basic status 'closed'.
*/
@ -515,7 +515,7 @@ LINPHONE_PUBLIC int linphone_presence_service_clear_notes(LinphonePresenceServic
/**
* Creates a presence person.
* @param[in] id The id of the presence person to be created. Can be NULL to generate it automatically.
* @returns The created presence person, NULL on error.
* @return The created presence person, NULL on error.
*/
LINPHONE_PUBLIC LinphonePresencePerson * linphone_presence_person_new(const char *id);
@ -635,7 +635,7 @@ LINPHONE_PUBLIC int linphone_presence_person_clear_activities_notes(LinphonePres
* Creates a presence activity.
* @param[in] acttype The #LinphonePresenceActivityType to set for the activity.
* @param[in] description An additional description of the activity to set for the activity. Can be NULL if no additional description is to be added.
* @returns The created presence activity, NULL on error.
* @return The created presence activity, NULL on error.
*/
LINPHONE_PUBLIC LinphonePresenceActivity * linphone_presence_activity_new(LinphonePresenceActivityType acttype, const char *description);
@ -687,7 +687,7 @@ LINPHONE_PUBLIC int linphone_presence_activity_set_description(LinphonePresenceA
* Creates a presence note.
* @param[in] content The content of the note to be created.
* @param[in] lang The language of the note to be created. Can be NULL if no language is to be specified for the note.
* @returns The created presence note, NULL on error.
* @return The created presence note, NULL on error.
*/
LINPHONE_PUBLIC LinphonePresenceNote * linphone_presence_note_new(const char *content, const char *lang);
@ -876,14 +876,14 @@ LINPHONE_PUBLIC void * linphone_presence_note_get_user_data(const LinphonePresen
* @param[in] lc #LinphoneCore object.
* @param[in] acttype The #LinphonePresenceActivityType to set for the activity.
* @param[in] description An additional description of the activity to set for the activity. Can be NULL if no additional description is to be added.
* @returns The created #LinphonePresenceActivity object.
* @return The created #LinphonePresenceActivity object.
*/
LINPHONE_PUBLIC LinphonePresenceActivity * linphone_core_create_presence_activity(LinphoneCore *lc, LinphonePresenceActivityType acttype, const char *description);
/**
* Create a default LinphonePresenceModel.
* @param[in] lc #LinphoneCore object.
* @returns The created #LinphonePresenceModel object.
* @return The created #LinphonePresenceModel object.
*/
LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model(LinphoneCore *lc);
@ -892,7 +892,7 @@ LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model(Linp
* @param[in] lc #LinphoneCore object.
* @param[in] acttype The #LinphonePresenceActivityType to set for the activity of the created model.
* @param[in] description An additional description of the activity to set for the activity. Can be NULL if no additional description is to be added.
* @returns The created #LinphonePresenceModel object.
* @return The created #LinphonePresenceModel object.
*/
LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model_with_activity(LinphoneCore *lc, LinphonePresenceActivityType acttype, const char *description);
@ -903,7 +903,7 @@ LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model_with
* @param[in] description An additional description of the activity to set for the activity. Can be NULL if no additional description is to be added.
* @param[in] note The content of the note to be added to the created model.
* @param[in] lang The language of the note to be added to the created model.
* @returns The created #LinphonePresenceModel object.
* @return The created #LinphonePresenceModel object.
*/
LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model_with_activity_and_note(LinphoneCore *lc, LinphonePresenceActivityType acttype, const char *description, const char *note, const char *lang);
@ -912,7 +912,7 @@ LINPHONE_PUBLIC LinphonePresenceModel * linphone_core_create_presence_model_with
* @param[in] lc #LinphoneCore object.
* @param[in] content The content of the note to be created.
* @param[in] lang The language of the note to be created.
* @returns The created #LinphonePresenceNote object.
* @return The created #LinphonePresenceNote object.
*/
LINPHONE_PUBLIC LinphonePresenceNote * linphone_core_create_presence_note(LinphoneCore *lc, const char *content, const char *lang);
@ -920,7 +920,7 @@ LINPHONE_PUBLIC LinphonePresenceNote * linphone_core_create_presence_note(Linpho
* Create a LinphonePresencePerson with the given id.
* @param[in] lc #LinphoneCore object
* @param[in] id The id of the person to be created.
* @returns The created #LinphonePresencePerson object.
* @return The created #LinphonePresencePerson object.
*/
LINPHONE_PUBLIC LinphonePresencePerson * linphone_core_create_presence_person(LinphoneCore *lc, const char *id);
@ -930,7 +930,7 @@ LINPHONE_PUBLIC LinphonePresencePerson * linphone_core_create_presence_person(Li
* @param[in] id The id of the service to be created.
* @param[in] basic_status The basic status of the service to be created.
* @param[in] contact A string containing a contact information corresponding to the service to be created.
* @returns The created #LinphonePresenceService object.
* @return The created #LinphonePresenceService object.
*/
LINPHONE_PUBLIC LinphonePresenceService * linphone_core_create_presence_service(LinphoneCore *lc, const char *id, LinphonePresenceBasicStatus basic_status, const char *contact);

View file

@ -734,25 +734,26 @@ void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filenam
}
}
char *lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename) {
int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, char *data, size_t max_length) {
char *dir = _lp_config_dirname(lpconfig->filename);
char *filepath = ms_strdup_printf("%s/%s", dir, filename);
char *result = NULL;
if(ortp_file_exist(filepath) == 0) {
FILE *file = fopen(filepath, "r");
if(file != NULL) {
result = ms_new0(char, MAX_LEN);
if(fgets(result, MAX_LEN, file) == NULL) {
ms_error("%s could not be loaded", filepath);
}
fclose(file);
} else {
ms_error("Could not open %s for read", filepath);
FILE *file = fopen(filepath, "r");
if(file != NULL) {
if(fread(data, 1, max_length, file)<=0) {
ms_error("%s could not be loaded. %s", filepath, strerror(errno));
goto err;
}
fclose(file);
} else {
ms_message("%s does not exist", filepath);
ms_error("Could not open %s for read. %s", filepath, strerror(errno));
goto err;
}
ms_free(dir);
ms_free(filepath);
return result;
return 0;
err:
ms_free(dir);
ms_free(filepath);
return -1;
}

View file

@ -281,12 +281,14 @@ LINPHONE_PUBLIC void lp_config_unref(LpConfig *lpconfig);
LINPHONE_PUBLIC void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filename, const char *data);
/**
* @brief Read a string from a file placed relatively with the Linphone configuration file
* @brief Read a string from a file placed beside the Linphone configuration file
* @param lpconfig LpConfig instance used as a reference
* @param filename Name of the file where data will be read from. The name is relative to the place of the config file
* @return The read string
* @param data Buffer where read string will be stored
* @param max_length Length of the buffer
* @return 0 on success, -1 on failure
*/
LINPHONE_PUBLIC char *lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename);
LINPHONE_PUBLIC int lp_config_read_relative_file(const LpConfig *lpconfig, const char *filename, char *data, size_t max_length);
#ifdef __cplusplus
}

View file

@ -59,15 +59,6 @@ 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 payload_type_set_enable(PayloadType *pt,int value)
{
if ((value)!=0) payload_type_set_flag(pt,PAYLOAD_TYPE_ENABLED); \
else payload_type_unset_flag(pt,PAYLOAD_TYPE_ENABLED);
}
static bool_t payload_type_enabled(const PayloadType *pt) {
return (((pt)->flags & PAYLOAD_TYPE_ENABLED)!=0);
}
bool_t linphone_core_payload_type_enabled(LinphoneCore *lc, const LinphonePayloadType *pt){
if (ms_list_find(lc->codecs_conf.audio_codecs, (PayloadType*) pt) || ms_list_find(lc->codecs_conf.video_codecs, (PayloadType*)pt)){
@ -97,6 +88,10 @@ int linphone_core_get_payload_type_number(LinphoneCore *lc, const PayloadType *p
return payload_type_get_number(pt);
}
void linphone_core_set_payload_type_number(LinphoneCore *lc, PayloadType *pt, int number){
payload_type_set_number(pt,number);
}
const char *linphone_core_get_payload_type_description(LinphoneCore *lc, PayloadType *pt){
if (ms_filter_codec_supported(pt->mime_type)){
MSFilterDesc *desc=ms_filter_get_encoder(pt->mime_type);
@ -177,7 +172,7 @@ static int lookup_vbr_typical_bitrate(int maxbw, int clock_rate){
static int get_audio_payload_bandwidth(LinphoneCore *lc, const PayloadType *pt, int maxbw){
if (linphone_core_payload_type_is_vbr(lc,pt)){
if (pt->flags & PAYLOAD_TYPE_BITRATE_OVERRIDE){
ms_message("PayloadType %s/%i has bitrate override",pt->mime_type,pt->clock_rate);
ms_debug("PayloadType %s/%i has bitrate override",pt->mime_type,pt->clock_rate);
return pt->normal_bitrate/1000;
}
return lookup_vbr_typical_bitrate(maxbw,pt->clock_rate);
@ -845,8 +840,25 @@ static void clear_ice_check_list(LinphoneCall *call, IceCheckList *removed){
void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md)
{
bool_t ice_restarted = FALSE;
if ((md->ice_pwd[0] != '\0') && (md->ice_ufrag[0] != '\0')) {
bool_t ice_params_found=FALSE;
if ((md->ice_pwd[0] != '\0') && (md->ice_ufrag[0] != '\0')) {
ice_params_found=TRUE;
} else {
int i;
for (i = 0; i < md->nb_streams; i++) {
const SalStreamDescription *stream = &md->streams[i];
IceCheckList *cl = ice_session_check_list(call->ice_session, i);
if (cl) {
if ((stream->ice_pwd[0] != '\0') && (stream->ice_ufrag[0] != '\0')) {
ice_params_found=TRUE;
} else {
ice_params_found=FALSE;
break;
}
}
}
}
if (ice_params_found) {
int i, j;
/* Check for ICE restart and set remote credentials. */
@ -878,11 +890,14 @@ void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call,
IceCheckList *cl = ice_session_check_list(call->ice_session, i);
if (cl && (stream->ice_pwd[0] != '\0') && (stream->ice_ufrag[0] != '\0')) {
if (ice_check_list_remote_credentials_changed(cl, stream->ice_ufrag, stream->ice_pwd)) {
if (ice_restarted == FALSE) {
if (ice_restarted == FALSE
&& ice_check_list_remote_ufrag(cl)
&& ice_check_list_remote_pwd(cl)) {
/* restart onlu if remote ufrag/paswd was already set*/
ice_session_restart(call->ice_session);
ice_restarted = TRUE;
}
ice_session_set_remote_credentials(call->ice_session, md->ice_ufrag, md->ice_pwd);
ice_check_list_set_remote_credentials(cl, stream->ice_ufrag, stream->ice_pwd);
break;
}
}
@ -1429,7 +1444,7 @@ static void linphone_core_migrate_proxy_config(LinphoneCore *lc, LinphoneTranspo
* Existing proxy configuration are added a transport parameter so that they continue using the unique transport that was set previously.
* This function must be used just after creating the core, before any call to linphone_core_iterate()
* @param lc the linphone core
* @returns 1 if migration was done, 0 if not done because unnecessary or already done, -1 in case of error.
* @return 1 if migration was done, 0 if not done because unnecessary or already done, -1 in case of error.
* @ingroup initializing
**/
int linphone_core_migrate_to_multi_transport(LinphoneCore *lc){

View file

@ -31,7 +31,49 @@ static bool_t only_telephone_event(const MSList *l){
return TRUE;
}
static PayloadType * find_payload_type_best_match(const MSList *l, const PayloadType *refpt){
typedef struct _PayloadTypeMatcher{
const char *mime_type;
PayloadType *(*match_func)(const MSList *l, const PayloadType *refpt);
}PayloadTypeMatcher;
static PayloadType * opus_match(const MSList *l, const PayloadType *refpt){
PayloadType *pt;
const MSList *elem;
PayloadType *candidate=NULL;
for (elem=l;elem!=NULL;elem=elem->next){
pt=(PayloadType*)elem->data;
/*workaround a bug in earlier versions of linphone where opus/48000/1 is offered, which is uncompliant with opus rtp draft*/
if (strcasecmp(pt->mime_type,"opus")==0 ){
if (refpt->channels==1){
pt->channels=1; /*so that we respond with same number of channels */
candidate=pt;
}else if (refpt->channels==2){
return pt;
}
}
}
return candidate;
}
/* the reason for this matcher is for some stupid uncompliant phone that offer G729a mime type !*/
static PayloadType * g729A_match(const MSList *l, const PayloadType *refpt){
PayloadType *pt;
const MSList *elem;
PayloadType *candidate=NULL;
for (elem=l;elem!=NULL;elem=elem->next){
pt=(PayloadType*)elem->data;
if (strcasecmp(pt->mime_type,"G729")==0 && refpt->channels==pt->channels){
candidate=pt;
}
}
return candidate;
}
static PayloadType * amr_match(const MSList *l, const PayloadType *refpt){
PayloadType *pt;
char value[10];
const MSList *elem;
@ -40,39 +82,63 @@ static PayloadType * find_payload_type_best_match(const MSList *l, const Payload
for (elem=l;elem!=NULL;elem=elem->next){
pt=(PayloadType*)elem->data;
/*workaround a bug in earlier versions of linphone where opus/48000/1 is offered, which is uncompliant with opus rtp draft*/
if (refpt->mime_type && strcasecmp(refpt->mime_type,"opus")==0 && refpt->channels==1
&& strcasecmp(pt->mime_type,refpt->mime_type)==0){
pt->channels=1; /*so that we respond with same number of channels */
candidate=pt;
break;
}
/* the compare between G729 and G729A is for some stupid uncompliant phone*/
if ( pt->mime_type && refpt->mime_type &&
(strcasecmp(pt->mime_type,refpt->mime_type)==0 ||
(strcasecmp(pt->mime_type, "G729") == 0 && strcasecmp(refpt->mime_type, "G729A") == 0 ))
&& pt->clock_rate==refpt->clock_rate && pt->channels==refpt->channels){
candidate=pt;
/*good candidate, check fmtp for H264 */
if (strcasecmp(pt->mime_type,"H264")==0){
if (pt->recv_fmtp!=NULL && refpt->recv_fmtp!=NULL){
int mode1=0,mode2=0;
if (fmtp_get_value(pt->recv_fmtp,"packetization-mode",value,sizeof(value))){
mode1=atoi(value);
}
if (fmtp_get_value(refpt->recv_fmtp,"packetization-mode",value,sizeof(value))){
mode2=atoi(value);
}
if (mode1==mode2)
break; /*exact match */
}
}else break;
if ( pt->mime_type && refpt->mime_type
&& strcasecmp(pt->mime_type, refpt->mime_type)==0
&& pt->clock_rate==refpt->clock_rate
&& pt->channels==refpt->channels) {
int octedalign1=0,octedalign2=0;
if (pt->recv_fmtp!=NULL && fmtp_get_value(pt->recv_fmtp,"octet-align",value,sizeof(value))){
octedalign1=atoi(value);
}
if (refpt->send_fmtp!=NULL && fmtp_get_value(refpt->send_fmtp,"octet-align",value,sizeof(value))){
octedalign2=atoi(value);
}
if (octedalign1==octedalign2) {
candidate=pt;
break; /*exact match */
}
}
}
return candidate;
}
static PayloadType * generic_match(const MSList *l, const PayloadType *refpt){
PayloadType *pt;
const MSList *elem;
for (elem=l;elem!=NULL;elem=elem->next){
pt=(PayloadType*)elem->data;
if ( pt->mime_type && refpt->mime_type
&& strcasecmp(pt->mime_type, refpt->mime_type)==0
&& pt->clock_rate==refpt->clock_rate
&& pt->channels==refpt->channels)
return pt;
}
return NULL;
}
static PayloadTypeMatcher matchers[]={
{"opus", opus_match},
{"G729A", g729A_match},
{"AMR", amr_match},
{"AMR-WB", amr_match},
{NULL, NULL}
};
static PayloadType * find_payload_type_best_match(const MSList *l, const PayloadType *refpt){
PayloadTypeMatcher *m;
for(m=matchers;m->mime_type!=NULL;++m){
if (refpt->mime_type && strcasecmp(m->mime_type,refpt->mime_type)==0){
return m->match_func(l,refpt);
}
}
return generic_match(l,refpt);
}
static MSList *match_payloads(const MSList *local, const MSList *remote, bool_t reading_response, bool_t one_matching_codec){
const MSList *e2,*e1;
MSList *res=NULL;
@ -110,6 +176,7 @@ static MSList *match_payloads(const MSList *local, const MSList *remote, bool_t
res=ms_list_append(res,newp);
/* we should use the remote numbering even when parsing a response */
payload_type_set_number(newp,remote_number);
payload_type_set_flag(newp, PAYLOAD_TYPE_FROZEN_NUMBER);
if (reading_response && remote_number!=local_number){
ms_warning("For payload type %s, proposed number was %i but the remote phone answered %i",
newp->mime_type, local_number, remote_number);
@ -120,6 +187,7 @@ static MSList *match_payloads(const MSList *local, const MSList *remote, bool_t
*/
newp=payload_type_clone(newp);
payload_type_set_number(newp,local_number);
payload_type_set_flag(newp, PAYLOAD_TYPE_FROZEN_NUMBER);
res=ms_list_append(res,newp);
}
}else{
@ -143,7 +211,8 @@ static MSList *match_payloads(const MSList *local, const MSList *remote, bool_t
if (!found){
ms_message("Adding %s/%i for compatibility, just in case.",p1->mime_type,p1->clock_rate);
p1=payload_type_clone(p1);
p1->flags|=PAYLOAD_TYPE_FLAG_CAN_RECV;
payload_type_set_flag(p1, PAYLOAD_TYPE_FLAG_CAN_RECV);
payload_type_set_flag(p1, PAYLOAD_TYPE_FROZEN_NUMBER);
res=ms_list_append(res,p1);
}
}

View file

@ -149,10 +149,10 @@ typedef struct _CallCallbackObj
struct _LinphoneChatMessageCbs {
belle_sip_object_t base;
void *user_data;
LinphoneChatMessageMsgStateChangedCb msg_state_changed;
LinphoneChatMessageFileTransferRecvCb file_transfer_recv; /**< Callback to store file received attached to a #LinphoneChatMessage */
LinphoneChatMessageFileTransferSendCb file_transfer_send; /**< Callback to collect file chunk to be sent for a #LinphoneChatMessage */
LinphoneChatMessageFileTransferProgressIndicationCb file_transfer_progress_indication; /**< Callback to indicate file transfer progress */
LinphoneChatMessageCbsMsgStateChangedCb msg_state_changed;
LinphoneChatMessageCbsFileTransferRecvCb file_transfer_recv; /**< Callback to store file received attached to a #LinphoneChatMessage */
LinphoneChatMessageCbsFileTransferSendCb file_transfer_send; /**< Callback to collect file chunk to be sent for a #LinphoneChatMessage */
LinphoneChatMessageCbsFileTransferProgressIndicationCb file_transfer_progress_indication; /**< Callback to indicate file transfer progress */
};
BELLE_SIP_DECLARE_VPTR(LinphoneChatMessageCbs);
@ -365,6 +365,7 @@ static MS2_INLINE void set_string(char **dest, const char *src){
#define PAYLOAD_TYPE_ENABLED PAYLOAD_TYPE_USER_FLAG_0
#define PAYLOAD_TYPE_BITRATE_OVERRIDE PAYLOAD_TYPE_USER_FLAG_3
#define PAYLOAD_TYPE_FROZEN_NUMBER PAYLOAD_TYPE_USER_FLAG_4
void linphone_process_authentication(LinphoneCore* lc, SalOp *op);
void linphone_authentication_ok(LinphoneCore *lc, SalOp *op);
@ -374,6 +375,8 @@ void linphone_notify_parse_presence(SalOp *op, const char *content_type, const c
void linphone_notify_convert_presence_to_xml(SalOp *op, SalPresenceModel *presence, const char *contact, char **content);
void linphone_notify_recv(LinphoneCore *lc, SalOp *op, SalSubscribeStatus ss, SalPresenceModel *model);
void linphone_proxy_config_process_authentication_failure(LinphoneCore *lc, SalOp *op);
void linphone_core_soundcard_hint_check(LinphoneCore* lc);
void linphone_subscription_answered(LinphoneCore *lc, SalOp *op);
void linphone_subscription_closed(LinphoneCore *lc, SalOp *op);
@ -407,7 +410,7 @@ 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);
int linphone_proxy_config_normalize_number(LinphoneProxyConfig *cfg, const char *username, char *result, size_t result_len);
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);
@ -445,8 +448,14 @@ bool_t linphone_core_symmetric_rtp_enabled(LinphoneCore*lc);
void linphone_core_queue_task(LinphoneCore *lc, belle_sip_source_func_t task_fun, void *data, const char *task_description);
LINPHONE_PUBLIC bool_t linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b);
LINPHONE_PUBLIC bool_t linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj);
typedef enum _LinphoneProxyConfigAddressComparisonResult{
LinphoneProxyConfigAddressDifferent,
LinphoneProxyConfigAddressEqual,
LinphoneProxyConfigAddressWeakEqual
} LinphoneProxyConfigAddressComparisonResult;
LINPHONE_PUBLIC LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b);
LINPHONE_PUBLIC LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj);
void _linphone_proxy_config_unregister(LinphoneProxyConfig *obj);
void _linphone_proxy_config_release_ops(LinphoneProxyConfig *obj);
@ -635,7 +644,9 @@ typedef struct sound_config
typedef struct codecs_config
{
MSList *audio_codecs; /* list of audio codecs in order of preference*/
MSList *video_codecs; /* for later use*/
MSList *video_codecs;
int dyn_pt;
int telephone_event_pt;
}codecs_config_t;
typedef struct video_config{
@ -702,7 +713,8 @@ struct _LinphoneCore
Sal *sal;
LinphoneGlobalState state;
struct _LpConfig *config;
RtpProfile *default_profile;
MSList *default_audio_codecs;
MSList *default_video_codecs;
net_config_t net_conf;
sip_config_t sip_conf;
rtp_config_t rtp_conf;
@ -711,8 +723,6 @@ struct _LinphoneCore
codecs_config_t codecs_conf;
ui_config_t ui_conf;
autoreplier_config_t autoreplier_conf;
MSList *payload_types;
int dyn_pt;
LinphoneProxyConfig *default_proxy;
MSList *friends;
MSList *auth_info;
@ -928,6 +938,14 @@ struct _LinphoneContent {
BELLE_SIP_DECLARE_VPTR(LinphoneContent);
struct _LinphoneBuffer {
belle_sip_object_t base;
void *user_data;
uint8_t *content; /**< A pointer to the buffer content */
size_t size; /**< The size of the buffer content */
};
BELLE_SIP_DECLARE_VPTR(LinphoneBuffer);
/*****************************************************************************
@ -998,12 +1016,25 @@ static MS2_INLINE const LinphoneErrorInfo *linphone_error_info_from_sal_op(const
return (const LinphoneErrorInfo*)sal_op_get_error_info(op);
}
static MS2_INLINE void payload_type_set_enable(PayloadType *pt,int value)
{
if ((value)!=0) payload_type_set_flag(pt,PAYLOAD_TYPE_ENABLED); \
else payload_type_unset_flag(pt,PAYLOAD_TYPE_ENABLED);
}
static MS2_INLINE bool_t payload_type_enabled(const PayloadType *pt) {
return (((pt)->flags & PAYLOAD_TYPE_ENABLED)!=0);
}
bool_t is_payload_type_number_available(const MSList *l, int number, const PayloadType *ignore);
const MSCryptoSuite * linphone_core_get_srtp_crypto_suites(LinphoneCore *lc);
/** Belle Sip-based objects need unique ids
*/
BELLE_SIP_DECLARE_TYPES_BEGIN(linphone,10000)
BELLE_SIP_TYPE_ID(LinphoneBuffer),
BELLE_SIP_TYPE_ID(LinphoneContactProvider),
BELLE_SIP_TYPE_ID(LinphoneContactSearch),
BELLE_SIP_TYPE_ID(LinphoneCall),

View file

@ -41,33 +41,41 @@ static void linphone_proxy_config_store_server_config(LinphoneProxyConfig* obj)
obj->saved_proxy = NULL;
}
bool_t linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b) {
LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_address_equal(const LinphoneAddress *a, const LinphoneAddress *b) {
if (a == NULL && b == NULL)
return TRUE;
return LinphoneProxyConfigAddressEqual;
else if (!a || !b)
return FALSE;
return LinphoneProxyConfigAddressDifferent;
if (linphone_address_equal(a,b))
return LinphoneProxyConfigAddressEqual;
if (linphone_address_weak_equal(a,b)) {
/*also check both transport and uri */
return linphone_address_is_secure(a) == linphone_address_is_secure(b) && linphone_address_get_transport(a) == linphone_address_get_transport(b);
} else
return FALSE; /*either username, domain or port ar not equals*/
if (linphone_address_is_secure(a) == linphone_address_is_secure(b) && linphone_address_get_transport(a) == linphone_address_get_transport(b))
return LinphoneProxyConfigAddressWeakEqual;
else
return LinphoneProxyConfigAddressDifferent;
}
return LinphoneProxyConfigAddressDifferent; /*either username, domain or port ar not equals*/
}
bool_t linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj) {
LinphoneProxyConfigAddressComparisonResult linphone_proxy_config_is_server_config_changed(const LinphoneProxyConfig* obj) {
LinphoneAddress *current_identity=obj->reg_identity?linphone_address_new(obj->reg_identity):NULL;
LinphoneAddress *current_proxy=obj->reg_proxy?linphone_address_new(obj->reg_proxy):NULL;
bool_t result=FALSE;
LinphoneProxyConfigAddressComparisonResult result_identity;
LinphoneProxyConfigAddressComparisonResult result;
if (!linphone_proxy_config_address_equal(obj->saved_identity,current_identity)){
result=TRUE;
goto end;
}
if (!linphone_proxy_config_address_equal(obj->saved_proxy,current_proxy)){
result=TRUE;
goto end;
}
result = linphone_proxy_config_address_equal(obj->saved_identity,current_identity);
if (result == LinphoneProxyConfigAddressDifferent) goto end;
result_identity = result;
result = linphone_proxy_config_address_equal(obj->saved_proxy,current_proxy);
if (result == LinphoneProxyConfigAddressDifferent) goto end;
/** If the proxies are equal use the result of the difference between the identities,
* otherwise the result is weak-equal and so weak-equal must be returned even if the
* identities were equal.
*/
if (result == LinphoneProxyConfigAddressEqual) result = result_identity;
end:
if (current_identity) linphone_address_destroy(current_identity);
@ -871,7 +879,7 @@ static void lookup_dial_plan(const char *ccc, dial_plan_t *plan){
strcpy(plan->ccc,ccc);
}
static bool_t is_a_phone_number(const char *username){
bool_t linphone_proxy_config_is_phone_number(LinphoneProxyConfig *proxy, const char *username){
const char *p;
for(p=username;*p!='\0';++p){
if (isdigit(*p) ||
@ -919,9 +927,8 @@ static void replace_plus(const char *src, char *dest, size_t destlen, const char
}
int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len){
int numlen;
if (is_a_phone_number(username)){
bool_t linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const char *username, char *result, size_t result_len){
if (linphone_proxy_config_is_phone_number(proxy, username)){
char *flatten;
flatten=flatten_number(username);
ms_debug("Flattened number is '%s'",flatten);
@ -930,7 +937,6 @@ int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const cha
/*no prefix configured, nothing else to do*/
strncpy(result,flatten,result_len);
ms_free(flatten);
return 0;
}else{
dial_plan_t dialplan;
lookup_dial_plan(proxy->dial_prefix,&dialplan);
@ -941,8 +947,8 @@ int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const cha
/*eventually replace the plus*/
replace_plus(flatten,result,result_len,proxy->dial_escape_plus ? dialplan.icp : NULL);
ms_free(flatten);
return 0;
}else{
int numlen;
int i=0;
int skip;
numlen=strlen(flatten);
@ -967,8 +973,11 @@ int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const cha
ms_free(flatten);
}
}
}else strncpy(result,username,result_len);
return 0;
return TRUE;
} else {
strncpy(result,username,result_len);
return FALSE;
}
}
/**
@ -976,14 +985,19 @@ int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const cha
**/
int linphone_proxy_config_done(LinphoneProxyConfig *obj)
{
LinphoneProxyConfigAddressComparisonResult res;
if (!linphone_proxy_config_check(obj->lc,obj))
return -1;
/*check if server address as changed*/
if (linphone_proxy_config_is_server_config_changed(obj)) {
res = linphone_proxy_config_is_server_config_changed(obj);
if (res != LinphoneProxyConfigAddressEqual) {
/* server config has changed, need to unregister from previous first*/
if (obj->op) {
_linphone_proxy_config_unregister(obj);
if (res == LinphoneProxyConfigAddressDifferent) {
_linphone_proxy_config_unregister(obj);
}
sal_op_set_user_pointer(obj->op,NULL); /*we don't want to receive status for this un register*/
sal_op_unref(obj->op); /*but we keep refresher to handle authentication if needed*/
obj->op=NULL;

View file

@ -332,6 +332,7 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report,
}
linphone_content_set_buffer(content, buffer, strlen(buffer));
ms_free(buffer);
if (call->log->reporting.on_report_sent != NULL){
call->log->reporting.on_report_sent(

View file

@ -62,9 +62,10 @@ SalMediaDescription *sal_media_description_new(){
static void sal_media_description_destroy(SalMediaDescription *md){
int i;
for(i=0;i<SAL_MEDIA_DESCRIPTION_MAX_STREAMS;i++){
ms_list_for_each(md->streams[i].payloads,(void (*)(void *))payload_type_destroy);
ms_list_free(md->streams[i].payloads);
ms_list_free_with_data(md->streams[i].payloads,(void (*)(void *))payload_type_destroy);
ms_list_free_with_data(md->streams[i].already_assigned_payloads,(void (*)(void *))payload_type_destroy);
md->streams[i].payloads=NULL;
md->streams[i].already_assigned_payloads=NULL;
}
ms_free(md);
}

View file

@ -65,6 +65,14 @@ set(SOURCE_FILES
videowindow.c
)
if(ENABLE_ASSISTANT)
list(APPEND SOURCE_FILES setupwizard.c)
endif()
if(GETTEXT_FOUND)
add_definitions("-DENABLE_NLS")
endif()
add_executable(linphone-gtk ${SOURCE_FILES})
set_target_properties(linphone-gtk PROPERTIES OUTPUT_NAME linphone)
target_include_directories(linphone-gtk PUBLIC ${GTK2_INCLUDE_DIRS})
@ -73,6 +81,9 @@ if(ENABLE_NOTIFY)
target_include_directories(linphone-gtk PUBLIC ${NOTIFY_INCLUDE_DIRS})
target_link_libraries(linphone-gtk ${NOTIFY_LIBRARIES})
endif()
if(ENABLE_ASSISTANT)
target_link_libraries(linphone-gtk ${SOUP_LIBRARIES})
endif()
install(TARGETS linphone-gtk
RUNTIME DESTINATION bin

View file

@ -180,7 +180,7 @@ static void calibration_finished(LinphoneCore *lc, LinphoneEcCalibratorStatus st
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO,
"%s","Did you hear three beeps ?");
"%s",_("Did you hear three beeps ?"));
g_signal_connect(G_OBJECT (dialog), "response",
G_CALLBACK (dialog_click),speaker_page);
@ -289,12 +289,12 @@ static void open_mixer(){
#ifdef WIN32
if(!g_spawn_command_line_async("control mmsys.cpl",&error)){
display_popup(GTK_MESSAGE_WARNING,"Sound preferences not found ");
display_popup(GTK_MESSAGE_WARNING,_("Sound preferences not found "));
g_error_free(error);
}
#elif __APPLE__
if(!g_spawn_command_line_async("open /System/Library/PreferencePanes/Sound.prefPane",&error)){
display_popup(GTK_MESSAGE_WARNING,"Sound preferences not found ");
display_popup(GTK_MESSAGE_WARNING,_("Sound preferences not found "));
g_error_free(error);
}
#else
@ -303,7 +303,7 @@ static void open_mixer(){
if(!g_spawn_command_line_async("kmix",&error)){
if(!g_spawn_command_line_async("mate-volume-control",&error)){
if(!g_spawn_command_line_async("xterm alsamixer",&error)){
display_popup(GTK_MESSAGE_WARNING,"Cannot launch system sound control ");
display_popup(GTK_MESSAGE_WARNING,_("Cannot launch system sound control "));
g_error_free(error);
}
}
@ -331,7 +331,7 @@ static GtkWidget *create_mic_page(){
GtkWidget *capture_device=gtk_combo_box_new();
GtkWidget *box = gtk_vbox_new(FALSE,0);
GtkWidget *label_audiolevel=gtk_label_new(_("No voice"));
GtkWidget *mixer_button=gtk_button_new_with_label("System sound preferences");
GtkWidget *mixer_button=gtk_button_new_with_label(_("System sound preferences"));
GtkWidget *image;
image=gtk_image_new_from_stock(GTK_STOCK_PREFERENCES,GTK_ICON_SIZE_MENU);
@ -370,7 +370,7 @@ static GtkWidget *create_speaker_page(){
GtkWidget *labelSpeakerLevel=gtk_label_new(_("Play three beeps"));
GtkWidget *spk_button=gtk_button_new_from_stock(GTK_STOCK_MEDIA_PLAY);
GtkWidget *playback_device=gtk_combo_box_new();
GtkWidget *mixer_button=gtk_button_new_with_label("System sound preferences");
GtkWidget *mixer_button=gtk_button_new_with_label(_("System sound preferences"));
GtkWidget *image;
const char **sound_devices;
@ -402,8 +402,8 @@ static GtkWidget *create_play_record_page(){
GtkWidget *vbox=gtk_table_new(2,2,FALSE);
GtkWidget *labelRecord=gtk_label_new(_("Press the record button and say some words"));
GtkWidget *labelPlay=gtk_label_new(_("Listen to your record voice"));
GtkWidget *rec_button=gtk_toggle_button_new_with_label("Record");
GtkWidget *play_button=gtk_toggle_button_new_with_label("Play");
GtkWidget *rec_button=gtk_toggle_button_new_with_label(_("Record"));
GtkWidget *play_button=gtk_toggle_button_new_with_label(_("Play"));
GtkWidget *image;
image=gtk_image_new_from_stock(GTK_STOCK_MEDIA_RECORD,GTK_ICON_SIZE_MENU);

View file

@ -199,4 +199,5 @@ void linphone_gtk_close_config_fetching(GtkWidget *w, LinphoneConfiguringState s
const char *linphone_gtk_get_sound_path(const char *file);
void linphone_gtk_in_call_show_video(LinphoneCall *call);
char *linphone_gtk_address(const LinphoneAddress *addr);/*return human readable identifier for a LinphoneAddress */
GtkWidget *linphone_gtk_get_camera_preview_window(void);

View file

@ -77,6 +77,7 @@ void linphone_gtk_status_icon_set_blinking(gboolean val);
void _linphone_gtk_enable_video(gboolean val);
void linphone_gtk_on_uribar_changed(GtkEditable *uribar, gpointer user_data);
static void linphone_gtk_init_ui(void);
static void linphone_gtk_quit(void);
#ifndef HAVE_GTK_OSX
static gint main_window_x=0;
@ -90,6 +91,7 @@ static int start_option = START_LINPHONE;
static gboolean no_video=FALSE;
static gboolean iconified=FALSE;
static gboolean run_audio_assistant=FALSE;
static gboolean selftest=FALSE;
static gchar *workingdir=NULL;
static char *progpath=NULL;
gchar *linphone_logfile=NULL;
@ -162,6 +164,13 @@ static GOptionEntry linphone_options[]={
.arg_data = (gpointer) &run_audio_assistant,
.description = N_("Run the audio assistant")
},
{
.long_name = "selftest",
.short_name = '\0',
.arg = G_OPTION_ARG_NONE,
.arg_data = (gpointer) &selftest,
.description = N_("Run self test and exit 0 if succeed")
},
{0}
};
@ -818,9 +827,6 @@ bool_t linphone_gtk_video_enabled(void){
void linphone_gtk_show_main_window(){
GtkWidget *w=linphone_gtk_get_main_window();
LinphoneCore *lc=linphone_gtk_get_core();
linphone_core_enable_video_preview(lc,linphone_gtk_get_ui_config_int("videoselfview",
VIDEOSELFVIEW_DEFAULT));
gtk_widget_show(w);
gtk_window_present(GTK_WINDOW(w));
}
@ -1014,13 +1020,6 @@ void _linphone_gtk_enable_video(gboolean val){
linphone_core_enable_video_capture(linphone_gtk_get_core(), TRUE);
linphone_core_enable_video_display(linphone_gtk_get_core(), TRUE);
linphone_core_set_video_policy(linphone_gtk_get_core(),&policy);
if (val){
linphone_core_enable_video_preview(linphone_gtk_get_core(),
linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT));
}else{
linphone_core_enable_video_preview(linphone_gtk_get_core(),FALSE);
}
}
void linphone_gtk_enable_video(GtkWidget *w){
@ -1032,7 +1031,6 @@ void linphone_gtk_enable_video(GtkWidget *w){
void linphone_gtk_enable_self_view(GtkWidget *w){
gboolean val=gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(w));
LinphoneCore *lc=linphone_gtk_get_core();
linphone_core_enable_video_preview(lc,val);
linphone_core_enable_self_view(lc,val);
linphone_gtk_set_ui_config_int("videoselfview",val);
}
@ -1319,6 +1317,9 @@ static void linphone_gtk_global_state_changed(LinphoneCore *lc, LinphoneGlobalSt
break;
case LinphoneGlobalOn:
linphone_gtk_init_ui();
if (selftest) {
gtk_timeout_add(300,(GtkFunction)gtk_main_quit,NULL);
}
break;
default:
break;
@ -1826,10 +1827,11 @@ void linphone_gtk_manage_login(void){
gboolean linphone_gtk_close(GtkWidget *mw){
/*shutdown calls if any*/
LinphoneCore *lc=linphone_gtk_get_core();
GtkWidget *camera_preview=linphone_gtk_get_camera_preview_window();
if (linphone_core_in_call(lc)){
linphone_core_terminate_all_calls(lc);
}
linphone_core_enable_video_preview(lc,FALSE);
if (camera_preview) gtk_widget_destroy(camera_preview);
#ifdef __APPLE__ /*until with have a better option*/
gtk_window_iconify(GTK_WINDOW(mw));
#else
@ -1840,13 +1842,6 @@ gboolean linphone_gtk_close(GtkWidget *mw){
#ifdef HAVE_GTK_OSX
static gboolean on_window_state_event(GtkWidget *w, GdkEventWindowState *event){
bool_t video_enabled=linphone_gtk_video_enabled();
if ((event->new_window_state & GDK_WINDOW_STATE_ICONIFIED) ||(event->new_window_state & GDK_WINDOW_STATE_WITHDRAWN) ){
linphone_core_enable_video_preview(linphone_gtk_get_core(),FALSE);
}else{
linphone_core_enable_video_preview(linphone_gtk_get_core(),
linphone_gtk_get_ui_config_int("videoselfview",VIDEOSELFVIEW_DEFAULT) && video_enabled);
}
return FALSE;
}
#endif
@ -1957,6 +1952,7 @@ static void linphone_gtk_init_main_window(){
g_signal_connect(G_OBJECT(main_window), "window-state-event",G_CALLBACK(on_window_state_event), NULL);
#endif
linphone_gtk_check_menu_items();
linphone_core_enable_video_preview(linphone_gtk_get_core(),FALSE);
}
void linphone_gtk_log_handler(OrtpLogLevel lev, const char *fmt, va_list args){
@ -2101,6 +2097,7 @@ int main(int argc, char *argv[]){
LpConfig *factory;
const char *db_file;
GError *error=NULL;
const char *tmp;
#if !GLIB_CHECK_VERSION(2, 31, 0)
g_thread_init(NULL);
@ -2110,6 +2107,8 @@ int main(int argc, char *argv[]){
progpath = strdup(argv[0]);
config_file=linphone_gtk_get_config_file(NULL);
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 */

View file

@ -360,143 +360,257 @@
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="n_rows">8</property>
<property name="n_columns">2</property>
<child>
<object class="GtkSpinButton" id="sip_udp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment7</property>
<signal name="value-changed" handler="linphone_gtk_udp_port_value_changed" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
</packing>
<object class="GtkLabel" id="sip_udp_port_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">SIP/UDP port</property>
</object>
</child>
<child>
<object class="GtkLabel" id="media_encryption_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Media encryption type</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">6</property>
</packing>
<object class="GtkHBox" id="hbox65">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="disabled_udp_port">
<property name="label" translatable="yes">Disabled</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_disabled_udp_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="random_udp_port">
<property name="label" translatable="yes">Random</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_random_udp_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="sip_udp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment8</property>
<signal name="value-changed" handler="linphone_gtk_udp_port_value_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">1</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="sip_tcp_port_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">SIP/TCP port</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="media_encryption_combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
<object class="GtkHBox" id="hbox66">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkCheckButton" id="disabled_tcp_port">
<property name="label" translatable="yes">Disabled</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_disabled_tcp_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="random_tcp_port">
<property name="label" translatable="yes">Random</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_random_tcp_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="sip_tcp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment8</property>
<signal name="value-changed" handler="linphone_gtk_tcp_port_value_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="audio_rtp_port_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Audio RTP/UDP:</property>
<property name="justify">right</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label7">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Video RTP/UDP:</property>
<property name="justify">right</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
<object class="GtkHBox" id="hbox6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkSpinButton" id="audio_min_rtp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment_min_audio_port</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="linphone_gtk_min_audio_port_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="audio_max_rtp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment_max_audio_port</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="linphone_gtk_max_audio_port_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="fixed_audio_port">
<property name="label" translatable="yes">Fixed</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_fixed_audio_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="video_rtp_port_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Video RTP/UDP:</property>
<property name="justify">right</property>
</object>
<packing>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
<property name="label" translatable="yes">Audio RTP/UDP:</property>
<property name="justify">right</property>
</object>
<packing>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox6">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkSpinButton" id="audio_min_rtp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment_min_audio_port</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="linphone_gtk_min_audio_port_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="audio_max_rtp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment_max_audio_port</property>
<property name="numeric">True</property>
<signal name="value-changed" handler="linphone_gtk_max_audio_port_changed" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="fixed_audio_port">
<property name="label" translatable="yes">Fixed</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_fixed_audio_port_toggle" swapped="no"/>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
</packing>
</child>
<child>
<object class="GtkHBox" id="hbox17">
<object class="GtkHBox" id="hbox17">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
@ -554,122 +668,109 @@
<property name="position">2</property>
</packing>
</child>
</object>
<packing>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
</packing>
</packing>
</child>
<child>
<object class="GtkLabel" id="media_encryption_label">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">Media encryption type</property>
</object>
<packing>
<property name="top_attach">4</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkCheckButton" id="media_encryption_mandatory">
<property name="label" translatable="yes">Media encryption is mandatory</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_set_media_encryption_mandatory" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
<object class="GtkComboBox" id="media_encryption_combo">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="active">0</property>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">4</property>
<property name="bottom_attach">5</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="tunnel_label">
<property name="can_focus">False</property>
<property name="label" translatable="yes">Tunnel</property>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
<object class="GtkCheckButton" id="media_encryption_mandatory">
<property name="label" translatable="yes">Media encryption is mandatory</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">False</property>
<property name="use_action_appearance">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="linphone_gtk_set_media_encryption_mandatory" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">5</property>
<property name="bottom_attach">6</property>
</packing>
</child>
<child>
<object class="GtkButton" id="tunnel_edit_button">
<property name="label">gtk-edit</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="linphone_gtk_edit_tunnel" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
<object class="GtkLabel" id="tunnel_label">
<property name="can_focus">False</property>
<property name="label" translatable="yes">Tunnel</property>
</object>
<packing>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DSCP fields</property>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
<object class="GtkButton" id="tunnel_edit_button">
<property name="label">gtk-edit</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="linphone_gtk_edit_tunnel" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">7</property>
<property name="bottom_attach">8</property>
</packing>
</child>
<child>
<object class="GtkButton" id="dscp_edit_button">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="linphone_gtk_dscp_edit" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
<object class="GtkLabel" id="label13">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">DSCP fields</property>
</object>
<packing>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label14">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">SIP/TCP port</property>
</object>
<packing>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkSpinButton" id="sip_tcp_port">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="invisible_char">•</property>
<property name="invisible_char_set">True</property>
<property name="primary_icon_activatable">False</property>
<property name="secondary_icon_activatable">False</property>
<property name="primary_icon_sensitive">True</property>
<property name="secondary_icon_sensitive">True</property>
<property name="adjustment">adjustment8</property>
<signal name="value-changed" handler="linphone_gtk_tcp_port_value_changed" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
</packing>
</child>
<child>
<object class="GtkLabel" id="label15">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes">SIP/UDP port</property>
</object>
<object class="GtkButton" id="dscp_edit_button">
<property name="label">gtk-edit</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="clicked" handler="linphone_gtk_dscp_edit" swapped="no"/>
</object>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">6</property>
<property name="bottom_attach">7</property>
</packing>
</child>
</object>
</child>
@ -1233,7 +1334,7 @@
<object class="GtkTable" id="table2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="n_rows">3</property>
<property name="n_rows">4</property>
<property name="n_columns">2</property>
<child>
<object class="GtkLabel" id="label9">
@ -1330,6 +1431,22 @@
<property name="y_options">GTK_EXPAND</property>
</packing>
</child>
<child>
<object class="GtkButton" id="button2">
<property name="label" translatable="yes">Show camera preview</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_action_appearance">False</property>
<signal name="clicked" handler="linphone_gtk_show_camera_preview_clicked" swapped="no"/>
</object>
<packing>
<property name="right_attach">2</property>
<property name="top_attach">3</property>
<property name="bottom_attach">4</property>
<property name="x_options">GTK_EXPAND</property>
</packing>
</child>
</object>
</child>
</object>
@ -2188,7 +2305,7 @@
<property name="top_attach">1</property>
<property name="bottom_attach">2</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="y_options"/>
</packing>
</child>
<child>
@ -2250,7 +2367,7 @@
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="y_options"/>
</packing>
</child>
<child>
@ -2265,7 +2382,7 @@
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">GTK_FILL</property>
<property name="y_options"></property>
<property name="y_options"/>
</packing>
</child>
</object>
@ -2538,7 +2655,7 @@
<object class="GtkLabel" id="ldap_server">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="no">label</property>
<property name="label">label</property>
</object>
<packing>
<property name="left_attach">1</property>
@ -2550,7 +2667,7 @@
<object class="GtkLabel" id="ldap_auth_method">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="no">label</property>
<property name="label">label</property>
</object>
<packing>
<property name="left_attach">1</property>
@ -2564,7 +2681,7 @@
<object class="GtkLabel" id="ldap_username">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="no">label</property>
<property name="label">label</property>
</object>
<packing>
<property name="left_attach">1</property>

View file

@ -913,13 +913,13 @@ void linphone_gtk_show_proxy_config(GtkWidget *pb, LinphoneProxyConfig *cfg){
GtkWidget *w=linphone_gtk_create_window("sip_account");
const char *tmp;
gboolean is_new=FALSE;
if (!cfg) {
cfg=linphone_core_create_proxy_config(linphone_gtk_get_core());
is_new=TRUE;
g_object_set_data(G_OBJECT(w),"is_new",GINT_TO_POINTER(TRUE));
}
if (!is_new){
linphone_proxy_config_edit(cfg);
gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"identity")),
@ -930,7 +930,7 @@ void linphone_gtk_show_proxy_config(GtkWidget *pb, LinphoneProxyConfig *cfg){
tmp=linphone_proxy_config_get_contact_parameters(cfg);
if (tmp) gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(w,"params")),tmp);
}
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(w,"regperiod")),
linphone_proxy_config_get_expires(cfg));
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(w,"register")),
@ -1361,26 +1361,76 @@ static gboolean apply_transports(PortConfigCtx *ctx){
return FALSE;
}
static void transport_changed(GtkWidget *parameters){
static PortConfigCtx* get_port_config() {
GtkWidget *mw=linphone_gtk_get_main_window();
PortConfigCtx *cfg=(PortConfigCtx*)g_object_get_data(G_OBJECT(mw),"port_config");
if (cfg==NULL){
cfg=g_new0(PortConfigCtx,1);
g_object_set_data_full(G_OBJECT(mw),"port_config",cfg,(GDestroyNotify)port_config_free);
}
if (cfg->timeout_id!=0)
if (cfg->timeout_id!=0) {
g_source_remove(cfg->timeout_id);
cfg->tp.udp_port=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(linphone_gtk_get_widget(parameters,"sip_udp_port")));
cfg->tp.tcp_port=gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(linphone_gtk_get_widget(parameters,"sip_tcp_port")));
}
cfg->timeout_id=g_timeout_add_seconds(2,(GSourceFunc)apply_transports,cfg);
return cfg;
}
static void transport_changed(GtkWidget *parameters){
PortConfigCtx *cfg = get_port_config();
GtkWidget *udp_random_port=linphone_gtk_get_widget(parameters,"random_udp_port");
GtkWidget *tcp_random_port=linphone_gtk_get_widget(parameters,"random_tcp_port");
GtkWidget *sip_udp_port=linphone_gtk_get_widget(parameters,"sip_udp_port");
GtkWidget *sip_tcp_port=linphone_gtk_get_widget(parameters,"sip_tcp_port");
gboolean udp_is_disabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(parameters,"disabled_udp_port")));
gboolean tcp_is_disabled=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(parameters,"disabled_tcp_port")));
gboolean udp_is_random=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(udp_random_port));
gboolean tcp_is_random=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tcp_random_port));
int udp_port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sip_udp_port));
int tcp_port = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(sip_tcp_port));
gtk_widget_set_sensitive(udp_random_port, !udp_is_disabled);
gtk_widget_set_sensitive(tcp_random_port, !tcp_is_disabled);
gtk_widget_set_sensitive(sip_udp_port, !udp_is_disabled && !udp_is_random);
gtk_widget_set_sensitive(sip_tcp_port, !tcp_is_disabled && !tcp_is_random);
cfg->tp.udp_port=udp_is_disabled?0:udp_is_random?-1:udp_port;
cfg->tp.tcp_port=tcp_is_disabled?0:tcp_is_random?-1:tcp_port;
}
void linphone_gtk_disabled_udp_port_toggle(GtkCheckButton *button){
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_random_udp_port_toggle(GtkCheckButton *button){
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_udp_port_value_changed(GtkSpinButton *button){
transport_changed(gtk_widget_get_toplevel((GtkWidget*)button));
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_disabled_tcp_port_toggle(GtkCheckButton *button){
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_random_tcp_port_toggle(GtkCheckButton *button){
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_tcp_port_value_changed(GtkSpinButton *button){
transport_changed(gtk_widget_get_toplevel((GtkWidget*)button));
GtkWidget *parameters = gtk_widget_get_toplevel((GtkWidget*)button);
transport_changed(parameters);
}
void linphone_gtk_show_parameters(void){
@ -1410,11 +1460,12 @@ void linphone_gtk_show_parameters(void){
linphone_core_ipv6_enabled(lc));
linphone_core_get_sip_transports(lc,&tr);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"sip_udp_port")),
tr.udp_port);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"sip_tcp_port")),
tr.tcp_port);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"disabled_udp_port")), tr.udp_port==0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"disabled_tcp_port")), tr.tcp_port==0);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"random_udp_port")), tr.udp_port==-1);
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"random_tcp_port")), tr.tcp_port==-1);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"sip_udp_port")), tr.udp_port);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb,"sip_tcp_port")), tr.tcp_port);
linphone_core_get_audio_port_range(lc, &min_port, &max_port);
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "audio_min_rtp_port")), min_port);

View file

@ -94,7 +94,7 @@ static gboolean drag_drop(GtkWidget *widget, GdkDragContext *drag_context, gint
return TRUE;
}
unsigned long get_native_handle(GdkWindow *gdkw){
static unsigned long get_native_handle(GdkWindow *gdkw){
#ifdef GDK_WINDOWING_X11
return (unsigned long)GDK_WINDOW_XID(gdkw);
#elif defined(WIN32)
@ -106,6 +106,15 @@ unsigned long get_native_handle(GdkWindow *gdkw){
return 0;
}
static void _resize_video_window(GtkWidget *video_window, MSVideoSize vsize){
MSVideoSize cur;
gtk_window_get_size(GTK_WINDOW(video_window),&cur.width,&cur.height);
if (vsize.width*vsize.height > cur.width*cur.height ||
ms_video_size_get_orientation(vsize)!=ms_video_size_get_orientation(cur) ){
gtk_window_resize(GTK_WINDOW(video_window),vsize.width,vsize.height);
}
}
static gint resize_video_window(LinphoneCall *call){
const LinphoneCallParams *params=linphone_call_get_current_params(call);
if (params){
@ -114,13 +123,7 @@ static gint resize_video_window(LinphoneCall *call){
GtkWidget *callview=(GtkWidget*)linphone_call_get_user_pointer(call);
GtkWidget *video_window=(GtkWidget*)g_object_get_data(G_OBJECT(callview),"video_window");
if (video_window){
MSVideoSize cur;
gtk_window_get_size(GTK_WINDOW(video_window),&cur.width,&cur.height);
if (vsize.width*vsize.height > cur.width*cur.height ||
ms_video_size_get_orientation(vsize)!=ms_video_size_get_orientation(cur) ){
g_message("Resized to %ix%i",vsize.width,vsize.height);
gtk_window_resize(GTK_WINDOW(video_window),vsize.width,vsize.height);
}
_resize_video_window(video_window,vsize);
}
}
}
@ -308,3 +311,55 @@ void linphone_gtk_in_call_show_video(LinphoneCall *call){
}
}
}
static void on_video_preview_destroyed(GtkWidget *video_preview, GtkWidget *mw){
LinphoneCore *lc=linphone_gtk_get_core();
guint timeout_id=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(video_preview),"timeout-id"));
g_object_set_data(G_OBJECT(mw),"video_preview",NULL);
linphone_core_enable_video_preview(lc,FALSE);
linphone_core_set_native_preview_window_id(lc,-1);
g_source_remove(timeout_id);
}
GtkWidget *linphone_gtk_get_camera_preview_window(void){
return (GtkWidget *)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"video_preview");
}
static gboolean check_preview_size(GtkWidget *video_preview){
MSVideoSize vsize=linphone_core_get_current_preview_video_size(linphone_gtk_get_core());
if (vsize.width && vsize.height){
MSVideoSize cur;
gtk_window_get_size(GTK_WINDOW(video_preview),&cur.width,&cur.height);
if (cur.width!=vsize.width || cur.height!=vsize.height){
gtk_window_resize(GTK_WINDOW(video_preview),vsize.width,vsize.height);
}
}
return TRUE;
}
void linphone_gtk_show_camera_preview_clicked(GtkButton *button){
GtkWidget *mw=linphone_gtk_get_main_window();
GtkWidget *video_preview=(GtkWidget *)g_object_get_data(G_OBJECT(mw),"video_preview");
if (!video_preview){
gchar *title;
LinphoneCore *lc=linphone_gtk_get_core();
GdkColor color;
guint tid;
video_preview=gtk_window_new(GTK_WINDOW_TOPLEVEL);
title=g_strdup_printf("%s - Video preview",linphone_gtk_get_ui_config("title","Linphone"));
gtk_window_set_title(GTK_WINDOW(video_preview),title);
gdk_color_parse("black",&color);
gtk_widget_modify_bg(video_preview,GTK_STATE_NORMAL,&color);
g_free(title);
g_object_set_data(G_OBJECT(mw),"video_preview",video_preview);
g_signal_connect(video_preview,"destroy",(GCallback)on_video_preview_destroyed,mw);
gtk_widget_show(video_preview);
linphone_core_set_native_preview_window_id(lc,get_native_handle(gtk_widget_get_window(video_preview)));
linphone_core_enable_video_preview(lc,TRUE);
tid=g_timeout_add(100,(GSourceFunc)check_preview_size,video_preview);
g_object_set_data(G_OBJECT(video_preview),"timeout-id",GINT_TO_POINTER(tid));
}
}

View file

@ -109,7 +109,8 @@ void sal_address_set_transport(SalAddress* addr,SalTransport transport);
void sal_address_set_transport_name(SalAddress* addr,const char* transport);
void sal_address_set_params(SalAddress *addr, const char *params);
void sal_address_set_uri_params(SalAddress *addr, const char *params);
bool_t sal_address_is_ipv6(SalAddress *addr);
bool_t sal_address_is_ipv6(const SalAddress *addr);
bool_t sal_address_is_sip(const SalAddress *addr);
void sal_address_set_password(SalAddress *addr, const char *passwd);
const char *sal_address_get_password(const SalAddress *addr);
void sal_address_set_header(SalAddress *addr, const char *header_name, const char *header_value);
@ -195,7 +196,8 @@ typedef struct SalStreamDescription{
char rtcp_addr[64];
int rtp_port;
int rtcp_port;
MSList *payloads; //<list of PayloadType
MSList *payloads; /*<list of PayloadType */
MSList *already_assigned_payloads; /*<list of PayloadType offered in the past, used for correct allocation of payload type numbers*/
int bandwidth;
int ptime;
SalStreamDir dir;

View file

@ -79,15 +79,10 @@ public interface LinphoneAddress {
*/
public String getDomain();
/**
* Port as String
* @return null if not set
* Port
* @return 0 if not set
*/
public String getPort();
/**
* Port as integer value.
* @return negative value if not set if not set
*/
public int getPortInt();
public int getPort();
/**
* set display name
* @param name
@ -104,15 +99,11 @@ public interface LinphoneAddress {
*/
public void setDomain(String domain);
/**
* set port as String
* @param port, null if not set
* set port
* @param port, 0 if not set
*/
public void setPort(String port);
/**
* set port as int
* @param port, negative value if not set
*/
public void setPortInt(int port);
public void setPort(int port);
/**
* Removes address's tags and uri headers so that it is displayable to the user.
**/

View file

@ -20,6 +20,7 @@ package org.linphone.core;
import java.util.Vector;
import org.linphone.core.LinphoneCoreListener.LinphoneEchoCalibrationListener;
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
@ -429,6 +430,45 @@ public interface LinphoneCore {
return mStringValue;
}
}
/**
* linphone log collection upload states
*/
static public class LogCollectionUploadState {
static private Vector<LogCollectionUploadState> values = new Vector<LogCollectionUploadState>();
/**
* Delivery in progress
*/
static public LogCollectionUploadState LogCollectionUploadStateInProgress = new LogCollectionUploadState(0,"LinphoneCoreLogCollectionUploadStateInProgress");
/**
* Log collection upload successfully delivered and acknowledged by remote end point
*/
static public LogCollectionUploadState LogCollectionUploadStateDelivered = new LogCollectionUploadState(1,"LinphoneCoreLogCollectionUploadStateDelivered");
/**
* Log collection upload was not delivered
*/
static public LogCollectionUploadState LogCollectionUploadStateNotDelivered = new LogCollectionUploadState(2,"LinphoneCoreLogCollectionUploadStateNotDelivered");
private final int mValue;
private final String mStringValue;
private LogCollectionUploadState(int value, String stringValue) {
mValue = value;
values.addElement(this);
mStringValue=stringValue;
}
public static LogCollectionUploadState fromInt(int value) {
for (int i=0; i<values.size();i++) {
LogCollectionUploadState state = (LogCollectionUploadState) values.elementAt(i);
if (state.mValue == value) return state;
}
throw new RuntimeException("state not found ["+value+"]");
}
public String toString() {
return mStringValue;
}
}
/**
* Set the context of creation of the LinphoneCore.
@ -1057,10 +1097,10 @@ public interface LinphoneCore {
/**
* Start an echo calibration of the sound devices, in order to find adequate settings for the echo canceler automatically.
* status is notified to {@link LinphoneCoreListener#ecCalibrationStatus(EcCalibratorStatus, int, Object)}
* @param User object
* @param listener the LinphoneEchoCalibrationListener to call when the calibration is done
* @throws LinphoneCoreException if operation is still in progress;
**/
void startEchoCalibration(Object data) throws LinphoneCoreException;
void startEchoCalibration(LinphoneEchoCalibrationListener listener) throws LinphoneCoreException;
/**
* Returns true if echo calibration is recommended.
@ -1799,4 +1839,21 @@ public interface LinphoneCore {
* @param listener to remove
*/
public void removeListener(LinphoneCoreListener listener);
/**
* Specifies a ring back tone to be played to far end during incoming calls, when early media is requested.
* @param file
*/
public void setRemoteRingbackTone(String file);
/**
* Return the ringback tone file used when doing early media. It may be null.
* @return the ringback tone file path.
*/
String getRemoteRingbackTone();
/**
* Upload the log collection to the configured server url.
*/
public void uploadLogCollection();
}

View file

@ -20,7 +20,6 @@ package org.linphone.core;
import java.nio.ByteBuffer;
import org.linphone.core.LinphoneCore.RemoteProvisioningState;
/**
*
@ -31,7 +30,7 @@ public interface LinphoneCoreListener {
public interface LinphoneListener extends LinphoneCoreListener,
LinphoneRemoteProvisioningListener, LinphoneMessageListener, LinphoneCallStateListener,
LinphoneCallEncryptionStateListener, LinphoneNotifyListener, LinphoneComposingListener,
LinphoneGlobalStateListener, LinphoneRegistrationStateListener {
LinphoneGlobalStateListener, LinphoneRegistrationStateListener, LinphoneLogCollectionUploadListener {
/**< Ask the application some authentication information
* @return */
void authInfoRequested(LinphoneCore lc, String realm, String username, String Domain);
@ -75,15 +74,6 @@ public interface LinphoneCoreListener {
*/
void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf);
/**
* Invoked when echo cancalation calibration is completed
* @param lc LinphoneCore
* @param status
* @param delay_ms echo delay
* @param data
*/
void ecCalibrationStatus(LinphoneCore lc,LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data);
/**
* Report Notified message received for this identity.
* @param lc LinphoneCore
@ -194,7 +184,7 @@ public interface LinphoneCoreListener {
* @param state the RemoteProvisioningState
* @param message the error message if state == Failed
*/
void configuringStatus(LinphoneCore lc, RemoteProvisioningState state, String message);
void configuringStatus(LinphoneCore lc, LinphoneCore.RemoteProvisioningState state, String message);
}
public interface LinphoneMessageListener extends LinphoneCoreListener {
@ -243,5 +233,31 @@ public interface LinphoneCoreListener {
*/
void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr);
}
public interface LinphoneEchoCalibrationListener extends LinphoneCoreListener {
/**
* Invoked when echo cancalation calibration is completed
* @param lc LinphoneCore
* @param status
* @param delay_ms echo delay
* @param data
*/
void ecCalibrationStatus(LinphoneCore lc, LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data);
}
public interface LinphoneLogCollectionUploadListener extends LinphoneCoreListener {
/**
* Callback prototype for reporting log collection upload progress indication.
*/
void uploadProgressIndication(LinphoneCore lc, int offset, int total);
/**
* Callback prototype for reporting log collection upload state change.
* @param lc LinphoneCore object
* @param state The state of the log collection upload
* @param info Additional information: error message in case of error state, URL of uploaded file in case of success.
*/
void uploadStateChanged(LinphoneCore lc, LinphoneCore.LogCollectionUploadState state, String info);
}
}

View file

@ -35,11 +35,13 @@ public class LinphoneAddressImpl implements LinphoneAddress {
private native String getUserName(long ptr);
private native String getDomain(long ptr);
private native int getTransport(long ptr);
private native int getPort(long ptr);
private native String toUri(long ptr);
private native void setDisplayName(long ptr,String name);
private native void setDomain(long ptr,String domain);
private native void setUserName(long ptr,String username);
private native void setTransport(long ptr, int transport);
private native void setPort(long ptr, int port);
private native String toString(long ptr);
protected LinphoneAddressImpl(String identity) throws LinphoneCoreException{
@ -89,40 +91,33 @@ public class LinphoneAddressImpl implements LinphoneAddress {
public TransportType getTransport() {
return TransportType.fromInt(getTransport(nativePtr));
}
public String toString() {
public int getPort() { return getPort(nativePtr); }
public String toString() {
return toString(nativePtr);
}
public String toUri() {
return toUri(nativePtr);
}
public String asString() {
return toString();
}
public String asStringUriOnly() {
return toUri(nativePtr);
}
public void clean() {
throw new RuntimeException("Not implemented");
}
public void setDisplayName(String name) {
setDisplayName(nativePtr,name);
}
public String asString() {
return toString();
}
public String asStringUriOnly() {
return toUri(nativePtr);
}
public void clean() {
throw new RuntimeException("Not implemented");
}
public String getPort() {
return String.valueOf(getPortInt());
}
public int getPortInt() {
return getPortInt();
}
public void setDomain(String domain) {
setDomain(nativePtr, domain);
}
public void setPort(String port) {
throw new RuntimeException("Not implemented");
}
public void setPortInt(int port) {
throw new RuntimeException("Not implemented");
}
public void setPort(int port) { setPort(nativePtr, port); }
public void setUserName(String username) {
setUserName(nativePtr,username);
}

View file

@ -27,8 +27,10 @@ public class LinphoneChatMessageImpl implements LinphoneChatMessage {
@Override
public String getText() {
byte rawText[];
try {
return new String(getText(nativePtr), "UTF-8");
rawText=getText(nativePtr);
if (rawText!=null) return new String(rawText, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

View file

@ -173,5 +173,4 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory {
public PresenceModel createPresenceModel(PresenceActivityType type, String description, String note, String lang) {
return new PresenceModelImpl(type, description, note, lang);
}
}

View file

@ -24,6 +24,7 @@ import java.io.File;
import java.io.IOException;
import org.linphone.core.LinphoneCall.State;
import org.linphone.core.LinphoneCoreListener.LinphoneEchoCalibrationListener;
import org.linphone.mediastream.Log;
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
import org.linphone.mediastream.video.capture.hwconf.Hacks;
@ -31,8 +32,7 @@ import org.linphone.mediastream.video.capture.hwconf.Hacks;
import android.content.Context;
import android.media.AudioManager;
class LinphoneCoreImpl implements LinphoneCore {
public class LinphoneCoreImpl implements LinphoneCore {
private final LinphoneCoreListener mListener; //to make sure to keep a reference on this object
protected long nativePtr = 0;
@ -558,8 +558,8 @@ class LinphoneCoreImpl implements LinphoneCore {
public synchronized boolean isKeepAliveEnabled() {
return isKeepAliveEnabled(nativePtr);
}
public synchronized void startEchoCalibration(Object data) throws LinphoneCoreException {
startEchoCalibration(nativePtr, data);
public synchronized void startEchoCalibration(LinphoneEchoCalibrationListener listener) throws LinphoneCoreException {
startEchoCalibration(nativePtr, listener);
}
public synchronized Transports getSignalingTransportPorts() {
@ -1303,4 +1303,31 @@ class LinphoneCoreImpl implements LinphoneCore {
public void removeListener(LinphoneCoreListener listener) {
removeListener(nativePtr, listener);
}
private native void setRemoteRingbackTone(long nativePtr, String file);
@Override
public void setRemoteRingbackTone(String file) {
setRemoteRingbackTone(nativePtr,file);
}
private native String getRemoteRingbackTone(long nativePtr);
@Override
public String getRemoteRingbackTone() {
return getRemoteRingbackTone(nativePtr);
}
private native void uploadLogCollection(long nativePtr);
@Override
public void uploadLogCollection() {
uploadLogCollection(nativePtr);
}
/**
* Enable the linphone core log collection to upload logs on a server.
*/
public native static void enableLogCollection(boolean enable);
/**
* Set the path where the log files will be written for log collection.
* @param path The path where the log files will be written.
*/
public native static void setLogCollectionPath(String path);
}

@ -1 +1 @@
Subproject commit 06a14487aa5acc0e3f0d4931c9a974762829d7bd
Subproject commit 7d2a30214b8010224eed26bc1f239907618b9674

2
oRTP

@ -1 +1 @@
Subproject commit a3debbd394fb32ab54ed265d2190711971c890e7
Subproject commit e5470e271d5be74f425db9221cd35a60ce4cf52e

33
po/CMakeLists.txt Normal file
View file

@ -0,0 +1,33 @@
############################################################################
# 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.
#
############################################################################
if(GETTEXT_FOUND)
string(REPLACE " " ";" LANGUAGES ${LINPHONE_ALL_LANGS})
foreach(language ${LANGUAGES})
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
RENAME linphone.mo
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
endforeach()
endif()

View file

@ -1,13 +1,12 @@
How to add a translation file
*****************************
To add a translation file in linphone project you should first :
- change the variable ALL_LINGUAS in configure.ac by adding the language (ex: fr)
- then add the file .po in the directory /po
- add the file .po in the directory /po
- run ./autogen.sh
Update the translation files
Update the translation files
***************************
To update all the translation files, in the directory /po run the following command
To update all the translation files, in the directory /po run the following command
$ make update-po

449
po/ar.po
View file

@ -1,23 +1,25 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
#
# Translators:
# محيي الدين <tx99h4@hotmail.com>, 2014
# محيي الدين <tx99h4@hotmail.com>, 2014
# محيي الدين <tx99h4@hotmail.com>, 2014-2015
msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/linphone-gtk/language/ar/)\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-13 16:34+0000\n"
"Last-Translator: محيي الدين <tx99h4@hotmail.com>\n"
"Language-Team: Arabic (http://www.transifex.com/projects/p/linphone-gtk/"
"language/ar/)\n"
"Language: ar\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974
#, c-format
@ -77,7 +79,9 @@ msgstr[5] "%i ثانية"
msgid ""
"<small><i>%s</i>\t<i>Quality: %s</i></small>\n"
"%s\t%s\t"
msgstr "<small><i>%s</i>\t<i>الجودة : %s</i></small>\n%s\t%s\t"
msgstr ""
"<small><i>%s</i>\t<i>الجودة : %s</i></small>\n"
"%s\t%s\t"
#: ../gtk/calllogs.c:341
#, c-format
@ -101,118 +105,131 @@ msgstr "أيقونة غير موجودة : %s"
msgid "Invalid sip contact !"
msgstr "جهة اتصال sip غير صالحة !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "أظهِرْ بعض معلومات التنقيح خلال التشغيل."
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "الدليل إلى الملف الذي سيُكتَب فيه سجل الوقائع."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "ابدأ لِنْفُونْ لكن دون تفعيل الفيديو."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "شغِّله مُصغَّرا، ولا تُظهِر الواجهة الرئيسية."
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "العنوان المُراد الاتصال به الآن"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "إذا تم التفعيل، سيجيب تلقائيا عن المكالمات الواردة"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: "
"c:\\Program Files\\Linphone)"
msgstr "حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)"
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
"حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr "ملف التهيئة"
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr "ابدأ مرشد الصوت"
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr "شغِّل الاختبار الذاتي ثم اخرِجْ 0 إذا نجح"
#: ../gtk/main.c:1083
#, 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"
"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:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr "ادخل كلمة السر ل <i>%s</i>\n في نطاق <i>%s</i>:"
msgstr ""
"ادخل كلمة السر ل <i>%s</i>\n"
" في نطاق <i>%s</i>:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "خطأ في المكالمة"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "إنتهت المكالمة"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "مكالمة واردة"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "أجِبْ"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "ارفضْ"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "المكالمة متوقفة"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>بواسطة %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "يود %s تشغيل الفيديو. هل تقبل ذلك ؟"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "وصلة إلى الموقع وِبْ"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "لِنْفُونْ - الهاتف المرئي عبر الإنترنت"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (افتراضي)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "التحويل إلى %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
msgstr "لا وجود للوحة الصوت على هذا الحاسوب.\nلن تتمكن من تلقي أو إجراء أي مكالمة."
msgstr ""
"لا وجود للوحة الصوت على هذا الحاسوب.\n"
"لن تتمكن من تلقي أو إجراء أي مكالمة."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "هاتف SIP المرئي الحر"
@ -281,7 +298,7 @@ msgstr "الإعدادات"
msgid "Enabled"
msgstr "مفعَّل"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "غير مفعَّل"
@ -383,7 +400,9 @@ msgstr "ZRTP"
msgid ""
"A more recent version is availalble from %s.\n"
"Would you like to open a browser to download it ?"
msgstr "يوجد إصدار حديث من طرف %s.\nهل تريد فتح المتصفح لتنزيله ؟"
msgstr ""
"يوجد إصدار حديث من طرف %s.\n"
"هل تريد فتح المتصفح لتنزيله ؟"
#: ../gtk/update.c:91
msgid "You are running the lastest version."
@ -424,7 +443,9 @@ msgstr[5] "عُثِر على %i جهة اتصال"
msgid ""
"Welcome!\n"
"This assistant will help you to use a SIP account for your calls."
msgstr "مرحبا !\nسيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات."
msgstr ""
"مرحبا !\n"
"سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات."
#: ../gtk/setupwizard.c:43
msgid "Create an account on linphone.org"
@ -446,7 +467,7 @@ msgstr "أريد تحديد عنوان التهيئة عن بعد"
msgid "Enter your linphone.org username"
msgstr "أدخِلْ إسم المستخدم في linphone.org"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "إسم المستخدم :"
@ -502,7 +523,9 @@ msgstr "أحطني علما بتحديثات لِنْفُونْ"
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
msgid "Thank you. Your account is now configured and ready for use."
@ -510,9 +533,13 @@ msgstr "شكرا لك، لقد جرت تهيئة حسابك وهو الآن قا
#: ../gtk/setupwizard.c:413
msgid ""
"Please validate your account by clicking on the link we just sent you by email.\n"
"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ثم ارجع إلى هنا واضغط على زر التالي."
msgstr ""
"يُرجى تأكيد حسابك وذلك بالضغط على الوصلة التي أرسلناها لك بالبريد "
"الإلكتروني.\n"
"ثم ارجع إلى هنا واضغط على زر التالي."
#: ../gtk/setupwizard.c:602
msgid "SIP account configuration assistant"
@ -617,7 +644,9 @@ msgstr "مباشرة أو عبر خادم"
msgid ""
"download: %f\n"
"upload: %f (kbit/s)"
msgstr "التنزيل % f\nالرفع : %f (ك.بِتْ/الثانية)"
msgstr ""
"التنزيل % f\n"
"الرفع : %f (ك.بِتْ/الثانية)"
#: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274
#, c-format
@ -629,7 +658,7 @@ msgstr "%ix%i @ %f fps"
msgid "%.3f seconds"
msgstr "%.3f ثانية"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "ضع السماعة"
@ -727,7 +756,9 @@ msgstr "إيقاف مؤقت"
msgid ""
"<small><i>Recording into\n"
"%s %s</i></small>"
msgstr "<small><i>يسجل في\n%s %s</i></small>"
msgstr ""
"<small><i>يسجل في\n"
"%s %s</i></small>"
#: ../gtk/incall_view.c:948
msgid "(Paused)"
@ -764,11 +795,25 @@ msgstr "جيد"
msgid "Too loud"
msgstr "صاخب"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr "هل سمعت ثلاث رنات ؟"
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr "لم يعثر على تفضيلات الصوت"
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr "لم يتمكن من تشغيل التحكم في الصوت للنظام"
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
"This assistant will help you to configure audio settings for Linphone"
msgstr "مرحبا !\nسيمكنك هذا المرشد من تهيئة إعدادات الصوت للِنْفُونْ"
msgstr ""
"مرحبا !\n"
"سيمكنك هذا المرشد من تهيئة إعدادات الصوت من أجل لِنْفُونْ"
#: ../gtk/audio_assistant.c:328
msgid "Capture device"
@ -782,6 +827,10 @@ msgstr "الحجم المسجَّل"
msgid "No voice"
msgstr "صامت"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr "تفضيلات الصوت للنظام"
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "جهاز السماع"
@ -798,6 +847,14 @@ msgstr "اضغط على زر التسجيل وانطق ببعض الكلمات"
msgid "Listen to your record voice"
msgstr "استمع لصوتك المسجَّل"
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr "تسجيل"
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr "تشغيل"
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "لنُشغِّل لِنْفُونْ الآن"
@ -1008,7 +1065,20 @@ msgid ""
"cs: Petr Pisar <petr.pisar@atlas.cz>\n"
"hu: anonymous\n"
"he: Eli Zaretskii <eliz@gnu.org>\n"
msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni <alberto.zanoni@-NO-SPAM-PLEASE!-tiscalinet.it>\nde: Jean-Jacques Sarton <jj.sarton@-NO-SPAM-PLEASE-t-online.de>\nsv: Daniel Nylander <po@danielnylander.se>\nes: Jesus Benitez <gnelson at inMail dot sk>\nja: YAMAGUCHI YOSHIYA <yushiya@anet.ne.jp>\npt_BR: Rafael Caesar Lenzi <rc_lenzi@yahoo.com.br>\npl: Robert Nasiadek <darkone@darkone.pl>\ncs: Petr Pisar <petr.pisar@atlas.cz>\nhu: anonymous\nhe: Eli Zaretskii <eliz@gnu.org>\nar: Muhiyeddine Cherik <tx99h4@hotmail.com>\n"
msgstr ""
"fr: Simon Morlat\n"
"en: Simon Morlat and Delphine Perreau\n"
"it: Alberto Zanoni <alberto.zanoni@-NO-SPAM-PLEASE!-tiscalinet.it>\n"
"de: Jean-Jacques Sarton <jj.sarton@-NO-SPAM-PLEASE-t-online.de>\n"
"sv: Daniel Nylander <po@danielnylander.se>\n"
"es: Jesus Benitez <gnelson at inMail dot sk>\n"
"ja: YAMAGUCHI YOSHIYA <yushiya@anet.ne.jp>\n"
"pt_BR: Rafael Caesar Lenzi <rc_lenzi@yahoo.com.br>\n"
"pl: Robert Nasiadek <darkone@darkone.pl>\n"
"cs: Petr Pisar <petr.pisar@atlas.cz>\n"
"hu: anonymous\n"
"he: Eli Zaretskii <eliz@gnu.org>\n"
"ar: Muhiyeddine Cherik <tx99h4@hotmail.com>\n"
#: ../gtk/contact.ui.h:2
msgid "SIP Address"
@ -1187,256 +1257,266 @@ msgid "<b>Transport</b>"
msgstr "<b>النقل</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "نوع وسيط التعمية"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "فيديو RTP/UDP :"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "صوت RTP/UDP :"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "ثابت"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "وسيط التعمية إجباري"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "النفق"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "حقول DSCP"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr "منفذ SIP/TCP"
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr "منفذ SIP/UDP"
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr "عشوائي"
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr "منفذ SIP/TCP"
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "صوت RTP/UDP :"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "ثابت"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "فيديو RTP/UDP :"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "نوع وسيط التعمية"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "وسيط التعمية إجباري"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "النفق"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "حقول DSCP"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>بروتوكول الشبكة والمنافذ</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "الاتصال مباشر بالإنترنت"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr "وراء جدار ناري (حدِّد عنوان IP البوابة)"
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "وراء جدار ناري (استخدم STUN)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "وراء جدار ناري (استخدم ICE)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "وراء جدار ناري (استخدم uPnP)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "عنوان IP العمومي :"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "خادم STUN :"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>إعدادات حول الجدار الناري</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "إعدادات الشبكة"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "صوت الجرس :"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "عتاد ALSA الخصوصي (اختياري) :"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "جهاز الالتقاط :"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "جهاز الرنين :"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "جهاز السمع :"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "فعِّل إزالة الصدى"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>الصوت</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "جهاز إدخال الفيديو :"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "المقدار المُراد لدقة الفيديو :"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr "طريقة إخراج الفيديو :"
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr "اظهر معاينة الكاميرا"
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>الفيديو</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>الهوية الافتراضية</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>حسابات الوكيل</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>الأمان</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "إدارة حسابات SIP"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "فعِّل"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "إلغاء التفعيل"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>المراميز</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "حدِّد 0 لعدم وضع أي حد"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "حد سرعة الرفع بالكيلوبِتْ/الثانية :"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "حد سرعة التنزيل بالكيلوبِتْ/الثانية :"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "فعِّل التحكم المتكيف مع الصبيب"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr "<i>التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة قناة الاتصال المتاحة خلال المكالمة.</i>"
msgstr ""
"<i>التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة "
"قناة الاتصال المتاحة خلال المكالمة.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>إدارة سعة القناة</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "المراميز"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>اللغة</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "أظهر الإعدادات المتقدمة"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>المستوى</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "واجهة المستخدم"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr "عنوان الخادم :"
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr "طريقة التحقق من الهوية :"
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr "<b>تهيئة LDAP</b>"
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr "LDAP"
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "أغلق"
@ -1643,9 +1723,16 @@ msgstr "تحديد عنوان URI التهيئة عن بعد"
#: ../gtk/config-uri.ui.h:2
msgid ""
"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n"
"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. "
msgstr "يسمح لك مربع الحوار هذا بإعداد عنوان http أو https الذي من خلاله تود جلب التهيئة عند بدء البرنامج.\nأدخل العنوان أسفله. بعد تأكيد الأمر، ستجري إعادة تشغيل لِنْفُونْ تلقائيا من أجل جلب والأخذ بعين الاعتبار الإعدادات الحديثة."
"This dialog allows to set an http or https address when configuration is to "
"be fetched at startup.\n"
"Please enter or modify the configuration URI below. After clicking OK, "
"Linphone will restart automatically in order to fetch and take into account "
"the new configuration. "
msgstr ""
"يسمح لك مربع الحوار هذا بإعداد عنوان http أو https الذي من خلاله تود جلب "
"التهيئة عند بدء البرنامج.\n"
"أدخل العنوان أسفله. بعد تأكيد الأمر، ستجري إعادة تشغيل لِنْفُونْ تلقائيا من أجل "
"جلب والأخذ بعين الاعتبار الإعدادات الحديثة."
#: ../gtk/provisioning-fetch.ui.h:1
msgid "Configuring..."
@ -1659,56 +1746,56 @@ msgstr "رجاءً انتظر ريثما ينتهي من جلب الإعدادا
msgid "Ready"
msgstr "جاهز"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr "تجري التهيئة"
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "يجري البحث عن وجهة رقم الهاتف..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "لم يتمكن من إيجاد هذا الرقم."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "يتصل ب"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "لم يتمكن من الاتصال"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "آسف، وصل عدد المكالمات الآنية إلى حده الأقصى"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "يتصل بك"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "ويطلب ردا تلقائيا."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "يجري تعديل إعدادات المكالمة..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "متصل."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "أُلغيت المكالمة"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "لم يتمكن من توقيف المكالمة مؤقتا"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "وضع المكالمة قيد الانتظار..."
@ -1772,19 +1859,22 @@ msgstr "في عطلة"
msgid "Unknown status"
msgstr "حالة مجهولة"
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
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:325
#: ../coreapi/proxy.c:333
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:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "تعذر الولوج بالهوية %s"
@ -1824,7 +1914,7 @@ msgstr "أجاب عن المكالمة %s."
msgid "Incompatible, check codecs or security settings..."
msgstr "غير موائم، تحقق من المراميز أو إعدادات الأمان..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "إعدادات الوسائط غير موائمة."
@ -1867,43 +1957,43 @@ msgstr "تم تجاهل المكالمة."
msgid "Request timeout."
msgstr "انتهت مهلة الطلب."
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "مُوجَّه"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "فشل الاتصال."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "تم التسجيل في %s بنجاح."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "أُلغي التسجيل في %s ."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "لا إجابة قبل انتهاء المهلة"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "فَشِل التسجيل في %s: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr "خدمة غير متاحة، تجري الإعادة"
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "شارة التحقق من الهوية هي %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1916,15 +2006,19 @@ msgstr[5] "فاتتك %i مكالمة."
#: ../coreapi/call_log.c:209
msgid "aborted"
msgstr ""
msgstr "أُجهِضت"
#: ../coreapi/call_log.c:212
msgid "completed"
msgstr ""
msgstr "اكتملت"
#: ../coreapi/call_log.c:215
msgid "missed"
msgstr ""
msgstr "فاتت"
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr "مجهول"
#: ../coreapi/call_log.c:220
#, c-format
@ -1935,12 +2029,17 @@ msgid ""
"Status: %s\n"
"Duration: %i mn %i sec\n"
msgstr ""
"%s في %s\n"
"من : %s\n"
"إلى : %s\n"
"الحالة : %s\n"
"المدة : %i دقيقة %i ثانية\n"
#: ../coreapi/call_log.c:221
msgid "Outgoing call"
msgstr ""
msgstr "المكالمة الصادرة"
#: ../gtk/videowindow.c:66
#, c-format
msgid "Cannot play %s."
msgstr ""
msgstr "لم يتمكن من تشغيل %s"

322
po/cs.po
View file

@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Czech (http://www.transifex.com/projects/p/linphone-gtk/"
"language/cs/)\n"
@ -98,31 +98,31 @@ msgstr "Nelze najít soubor s obrázkem: %s"
msgid "Invalid sip contact !"
msgstr "Neplatný sipový kontakt!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
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:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "Soubor, kam zapisovat protokol."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Spustí linphone se zakázaným obrazem."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
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:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "Zavolá právě teď na tuto adresu"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "je-li nastaveno, automaticky zvedne příchozí hovor"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -130,15 +130,19 @@ msgstr ""
"Zadejte pracovní adresář (měl by být základní instalační adresář, například "
"c:\\Program Files\\Linphone)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -151,66 +155,66 @@ msgstr ""
"do svého adresáře?\n"
"Odpovíte-li ne, tato osobo bude dočasně blokována."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Chyba hovoru"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Hovor ukončen"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Příchozí hovor"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Odpovědět"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Odmítnout"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Hovor odložen"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>kým: %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "%s navrhuje začít videohovor. Přijímáte?"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Odkaz na webovou stránku"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Lipnhone  internetový videofon"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Výchozí)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Byly jsme přepojeni na %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -218,7 +222,7 @@ msgstr ""
"Na tomto počítači nebyla objevena žádná zvuková karta.\n"
"Nebudete moci vytáčet a přijímat a zvukové hovory."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Volný SIP videofon"
@ -287,7 +291,7 @@ msgstr "Parametry"
msgid "Enabled"
msgstr "Povoleno"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Zakázáno"
@ -451,7 +455,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr "Zadejte uživatelské jméno na linphone.org"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Uživatelské jméno:"
@ -643,7 +647,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr "%.3f sekund"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Zavěsit"
@ -780,6 +784,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -798,6 +814,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -814,6 +834,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1203,210 +1231,218 @@ msgid "<b>Transport</b>"
msgstr "<b>Přenos</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Druh šifrování médií"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Obrazový RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Zvukový RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Stálý"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Šifrování médií je povinné"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Tunel"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "Položky DSCP"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Zvukový RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Stálý"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Obrazový RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Druh šifrování médií"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Šifrování médií je povinné"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Tunel"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "Položky DSCP"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Síťové protokoly a porty</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Přímé připojení do Internetu"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Za NAT/firewallem (adresu určí STUN)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "Za NAT/firewallem (adresu určí ICE)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "Za NAT/firewallem (adresu určí UPnP)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Veřejná IP adresa:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN server:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT a firewall</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Nastavení sítě"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Vyzvánění:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Zvláštní ALSA zařízení (volitelné):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Zařízení pro nahrávání:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Zařízení pro vyzvánění:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Zařízení pro přehrávání:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Zapnout potlačení ozvěny"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Zvuk</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Vstupní zařízení obrazu:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Upřednostňované rozlišení obrazu:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Obraz</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Implicitní totožnost</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Proxy účty</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Soukromí</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Nastavení SIP účtů"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Povolit"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Zakázat"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Kodeky</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 znamená „neomezeno“"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Omezení odchozí rychlosti (kb/s):"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Omezení příchozí rychlosti (kb/s):"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Zapnout přizpůsobující se řízení rychlosti"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1414,47 +1450,47 @@ msgstr ""
"<i>Přizpůsobující se řízení rychlosti je technika dynamického odhadu "
"dostupného pásma během hovoru.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Využití šířky pásma</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Kodeky"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Jazyk</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Zobrazit podrobnější nastavení"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Úroveň</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Uživatelské rozhraní"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Hotovo"
@ -1680,56 +1716,56 @@ msgstr ""
msgid "Ready"
msgstr "Připraven."
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Vyhledává se umístění čísla…"
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Toto číslo nelze vyhledat."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Navazuje se spojení"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Nelze volat"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
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:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "vás volá"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " a požaduje automatickou zvednutí."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Upravují se parametry hovoru…"
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Připojeno."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Hovor přerušen"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Hovor nebylo možné odložit"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Současný hovor se odkládá…"
@ -1793,7 +1829,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1801,7 +1837,7 @@ msgstr ""
"Adresa SIP proxy, kterou jste zadali, není platná. Musí začínat na „sip:“ a "
"pak musí následovat jméno stroje."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1809,7 +1845,7 @@ msgstr ""
"SIP identita, kterou jste zadali, není platná.\n"
"Měla by mít tvar sip:uživatel@proxydoména, například sip:alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Nelze se přihlásit jako %s"
@ -1849,7 +1885,7 @@ msgstr "Hovor přijat kým: %s."
msgid "Incompatible, check codecs or security settings..."
msgstr "Není slučitelné. Zkontrolujte nastavení kodeků a zabezpečení…"
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Neslučitelné parametry médií."
@ -1892,43 +1928,43 @@ msgstr "Volání odmítnuto."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Přesměrováno"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Volání se nezdařilo."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registrace na %s byla úspěšná."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Odregistrování z %s hotovo."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "odpověď nedorazila včas"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Registrace na %s selhala: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Klíč k ověření totožnosti je %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1948,6 +1984,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

322
po/de.po
View file

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-13 16:34+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: German (http://www.transifex.com/projects/p/linphone-gtk/"
"language/de/)\n"
@ -98,33 +98,33 @@ msgstr "Pixmapdatei %s kann nicht gefunden werden."
msgid "Invalid sip contact !"
msgstr "Ungültiger SIP-Kontakt!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "Ausgabe von Debug-Informationen auf stdout während der Laufzeit"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "Pfad zu einer Datei, in die Protokolle geschrieben werden."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Linphone mit ausgeschaltetem Video starten."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
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:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "Im Moment anzurufende Adresse"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "Falls aktiviert, werden eingehende Anrufe automatisch beantwortet"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -132,15 +132,19 @@ msgstr ""
"Geben Sie einen Arbeitsordner an (sollte der Installationsordner sein, z. B. "
"C:\\Programme\\Linphone)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr "Konfigurationsdatei"
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr "Starte den Audio-Assistent"
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -153,7 +157,7 @@ msgstr ""
"Ihrer Kontaktliste hinzufügen?\n"
"Wenn Sie mit Nein antworten, wird diese Person vorläufig blockiert."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
@ -162,59 +166,59 @@ msgstr ""
"Bitte geben Sie Ihr Passwort für den Benutzernamen <i>%s</i>\n"
" für Bereich <i>%s</i> ein:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Anruf fehlgeschlagen"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Anruf beendet"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Eingehender Anruf"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Annehmen"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Abweisen"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Anruf wird gehalten"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>von %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, 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:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Website-Verknüpfung"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - ein Internet-Video-Telefon"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Vorgabe)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Vermittlung nach %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -222,7 +226,7 @@ msgstr ""
"Auf diesem Rechner können keine Soundkarten gefunden werden.\n"
"Sie können keine Audio-Anrufe tätigen oder entgegennehmen."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Ein freies SIP-Video-Telefon"
@ -291,7 +295,7 @@ msgstr "Parameter"
msgid "Enabled"
msgstr "Freigegeben"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Gesperrt"
@ -459,7 +463,7 @@ msgstr "Ich möchte eine URI zur Fernkonfiguration angeben"
msgid "Enter your linphone.org username"
msgstr "Geben Sie Ihren Benutzernamen bei linphone.org ein."
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Benutzername:"
@ -652,7 +656,7 @@ msgstr "%ix%i @ %f bps"
msgid "%.3f seconds"
msgstr "%.3f Sekunden"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Auflegen"
@ -789,6 +793,18 @@ msgstr "gut"
msgid "Too loud"
msgstr "zu laut"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -810,6 +826,10 @@ msgstr "aufgenommene Lautstärke"
msgid "No voice"
msgstr "Keine Stimme"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "Wiedergabegerät"
@ -826,6 +846,14 @@ msgstr "Drücken Sie den Aufnahmeknopf und sagen Sie etwas"
msgid "Listen to your record voice"
msgstr "Hören Sie das Aufgenommene"
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "Linphone jetzt starten"
@ -1229,212 +1257,220 @@ msgid "<b>Transport</b>"
msgstr "<b>Übertragung</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Verschlüsselungstyp der Medien"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Fest"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Medienverschlüsselung erzwingen"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Tunnel"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "DSCP-Felder"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr "SIP/TCP Port"
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr "SIP/UDP Port"
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr "SIP/TCP Port"
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Fest"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Verschlüsselungstyp der Medien"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Medienverschlüsselung erzwingen"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Tunnel"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "DSCP-Felder"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Netzwerkprotokoll und Ports</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Direkte Verbindung ins Internet"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr "Hinter NAT / Firewall (Gateway IP angeben)"
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Hinter NAT / Firewall (STUN verwenden)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "Hinter NAT / Firewall (ICE verwenden)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "Hinter NAT / Firewall (uPnP verwenden)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Öffentliche IP-Adresse:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN-Server:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT und Firewall</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Netzwerkeinstellungen"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Klingelton:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Spezielles ALSA-Gerät (optional):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Aufnahmegerät:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Gerät für Klingelton:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Wiedergabegerät:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Echounterdrückung ein"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Audio</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Video-Aufnahmegerät:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Bevorzugte Video-Auflösung:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr "Methode zur Videoausgabe"
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Video</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Standard-Identität</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Proxy-Konten</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Privatsphäre</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "SIP-Konten verwalten"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Freigeben"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Sperren"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Codecs</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 bedeutet „unbegrenzt“"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Upload-Bandbreite (kbit/sec):"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Download-Bandbreite (kbit/sec):"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Adaptive Ratenregelung ein"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1442,47 +1478,47 @@ msgstr ""
"<i>Adaptive Ratenregelung ist eine Technik zur dynamischen Abschätzung der "
"zur Verfügung stehenden Bandbreite während eines Anrufs.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Bandbreiten-Einstellungen</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Codecs"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Sprache</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Fortgeschrittene Einstellungen anzeigen"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Detaillierung</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Benutzeroberfläche"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr "Server-Adresse"
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr "Authentifizierungsmethode"
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr "LDAP-Kontoeinrichtung"
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr "LDAP"
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Fertig"
@ -1714,56 +1750,56 @@ msgstr ""
msgid "Ready"
msgstr "Bereit"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr "Einstellen"
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Telefonnummernziel wird gesucht..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Diese Nummer kann nicht aufgelöst werden."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Verbindungsaufbau"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Anruf kann nicht getätigt werden."
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht."
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "ruft Sie an"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " und fragt nach automatischer Antwort."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Die Anrufparameter werden verändert..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Verbunden."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Anruf abgebrochen"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Anruf kann nicht gehalten werden"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Aktueller Anruf wird gehalten..."
@ -1827,7 +1863,7 @@ msgstr "Urlaub"
msgid "Unknown status"
msgstr "Unbekannter Status"
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1835,7 +1871,7 @@ msgstr ""
"Die von Ihnen eingegebene SIP-Proxy-Adresse ist ungültig, sie muss mit "
"„sip:“ gefolgt vom Hostnamen beginnen."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1844,7 +1880,7 @@ msgstr ""
"Sie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:"
"alice@beispiel.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Anmeldung als %s fehlgeschlagen"
@ -1884,7 +1920,7 @@ msgstr "Anruf wird von %s entgegengenommen."
msgid "Incompatible, check codecs or security settings..."
msgstr "Inkompatibel, prüfe Codecs oder Sicherheitseinstellungen..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Inkompatible Medienparameter."
@ -1927,43 +1963,43 @@ msgstr "Anruf abgewiesen"
msgid "Request timeout."
msgstr "Zeitüberschreitung bei der Anfrage"
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Umgeleitet"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Anruf fehlgeschlagen."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registrierung auf %s erfolgreich."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Abmeldung von %s ist erfolgt."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "Zeitüberschreitung bei der Antwort"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Registrierung auf %s fehlgeschlagen: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr "Service nicht verfügbar, versuche erneut"
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Authentifizierungs-Token ist %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1982,6 +2018,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

322
po/es.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/linphone-gtk/"
"language/es/)\n"
@ -92,32 +92,32 @@ msgstr "No se pudo encontrar el archivo pixmap: %s"
msgid "Invalid sip contact !"
msgstr "¡Contacto SIP no válido!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
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:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "ruta a un fichero donde escribir logs."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
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:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "dirección a la que llamar inmediatamente"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "si está activo, responder a llamadas entrantes automáticamente"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -125,15 +125,19 @@ 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:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -146,66 +150,66 @@ msgstr ""
"contactos?\n"
"Si responde no, esta persona será bloqueada temporalmente."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr ""
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Llamada entrante"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Contestar"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Enlace a la Web"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - un video-teléfono a través de Internet"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Opción predeterminada)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Somos transferidos a %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -213,7 +217,7 @@ msgstr ""
"No se ha encontrado una tarjeta de sonido en este equipo.\n"
"No será posible realizar o recibir llamadas de audio."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Un video-teléfono SIP gratuito"
@ -282,7 +286,7 @@ msgstr "Parámetros"
msgid "Enabled"
msgstr "Activado"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Desactivado"
@ -443,7 +447,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr ""
@ -627,7 +631,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -762,6 +766,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -780,6 +796,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -796,6 +816,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1187,210 +1215,218 @@ msgid "<b>Transport</b>"
msgstr ""
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Tipo de cifrado de medios"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Vídeo RTP/UDP"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Vídeo RTP/UDP"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Tipo de cifrado de medios"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Protocolo de red y puertos</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Conexión directa a Internet"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:31
#: ../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:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr ""
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr ""
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr ""
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr ""
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr ""
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Dispositivo especial ALSA (opcional):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr ""
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr ""
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr ""
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Activar cancelación de eco"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr ""
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr ""
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Resolución de vídeo preferida:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
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 "<b>Default identity</b>"
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 "<b>Proxy accounts</b>"
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 "<b>Privacy</b>"
msgstr ""
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Gestionar cuentas SIP"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Activar"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Desactivar"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr ""
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 significa \"ilimitado\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Velocidad límite de subida en Kbit/seg"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Velocidad límite de descarga en Kbit/seg:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Activar control de frecuencia adaptativo"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1398,47 +1434,47 @@ msgstr ""
"<i>Control de frecuencia adaptativo es una técnica que estima dinámicamente "
"el ancho de banda disponible durante la llamada.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Control de ancho de banda</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr ""
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr ""
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Mostrar opciones avanzadas"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr ""
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr ""
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr ""
@ -1664,56 +1700,56 @@ msgstr ""
msgid "Ready"
msgstr ""
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Buscando el número de teléfono del destinatario…"
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "No se ha podido resolver este número."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr ""
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
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:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "y ha solicitado auto respuesta."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Modificando parámetros de llamada…"
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Conectado."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "No se pudo pausar la llamada"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Pausando la llamada actual..."
@ -1777,7 +1813,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1785,7 +1821,7 @@ msgstr ""
"La dirección del Proxy SIP que ha introducido no es válida, debe empezar con "
"\"sip:\" seguido del hostname."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1794,7 +1830,7 @@ msgstr ""
"Debe ser del tipo sip:username@proxydomain, como por ejemplo sip:"
"alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr ""
@ -1834,7 +1870,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1877,43 +1913,43 @@ msgstr "Llamada rechazada."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Redigirida"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr ""
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr ""
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "timeout sin respuesta"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr ""
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1932,6 +1968,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

324
po/fr.po
View file

@ -5,14 +5,14 @@
# Translators:
# Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>, 2014
# Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>, 2014
# Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>, 2014
# Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>, 2014-2015
# Simon Morlat <simon.morlat@linphone.org>, 2001
msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:30+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-13 16:34+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: French (http://www.transifex.com/projects/p/linphone-gtk/"
"language/fr/)\n"
@ -98,31 +98,31 @@ msgstr "Icone non trouvée: %s"
msgid "Invalid sip contact !"
msgstr "Contact sip invalide !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "affiche des informations de debogage"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "chemin vers le fichier de logs."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Démarrer linphone avec la vidéo désactivée."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "Démarre iconifié, sans interface principale."
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "adresse à appeler maintenant"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "si positionné, répond automatiquement aux appels entrants"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -130,15 +130,19 @@ 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:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr "Ficher de configuration"
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr "Démarre l'assistant audio"
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
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:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -152,7 +156,7 @@ msgstr ""
"Si vous répondez non, cette personne sera mise temporairement sur liste "
"noire."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
@ -161,59 +165,59 @@ msgstr ""
"Entrez le mot de passe pour <i>%s</i>\n"
" sur le domaine <i>%s</i>:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Erreur lors de l'appel"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Appel terminé."
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Appel entrant"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Répondre"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Refuser"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Appel en pause"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "b>par %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, 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:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Lien site web"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - un téléphone video pour l'internet"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (par défaut)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Transfert vers %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -221,7 +225,7 @@ msgstr ""
"Aucune carte son n'a été détectée sur cet ordinateur.\n"
"Vous ne pourrez pas effectuer d'appels audio."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Un visiophone libre"
@ -290,7 +294,7 @@ msgstr "Paramètres"
msgid "Enabled"
msgstr "Activé"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Désactivé"
@ -458,7 +462,7 @@ msgstr "Je veux spécifier une URI de configuration"
msgid "Enter your linphone.org username"
msgstr "Entrez votre identifiant linphone.org"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Nom d'utilisateur:"
@ -650,7 +654,7 @@ msgstr "%ix%i @ %f fps"
msgid "%.3f seconds"
msgstr "%.3f secondes"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Raccrocher"
@ -787,6 +791,18 @@ msgstr "Bien"
msgid "Too loud"
msgstr "Trop bruyant"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr "Avez-vous entendu trois bips ?"
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr "Préférences son non trouvé"
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr "Impossible de démarrer le contrôleur système du son"
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -808,6 +824,10 @@ msgstr "Volume enregistré"
msgid "No voice"
msgstr "Silencieux"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr "Préférences son système"
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "Périphérique d'écoute"
@ -824,6 +844,14 @@ msgstr "Appuyer sur le bouton enregistrer et dites quelques mots"
msgid "Listen to your record voice"
msgstr "Ecoutez votre voix enregistrée"
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr "Enregistrer"
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr "Jouer"
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "Démarrons Linphone maintenant"
@ -1225,212 +1253,220 @@ msgid "<b>Transport</b>"
msgstr "<b>Transport</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Type d'encryption media"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Vidéo RTP / UDP :"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Audio RTP / UDP :"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Fixe"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Le chiffrement media est obligatoire"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Tunnel"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "Champs DSCP"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr "Port SIP / TCP"
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr "Port SIP / UDP"
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr "Aléatoire"
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr "Port SIP / TCP"
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Audio RTP / UDP :"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Fixe"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Vidéo RTP / UDP :"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Type d'encryption media"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Le chiffrement media est obligatoire"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Tunnel"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "Champs DSCP"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Protocoles réseaux et ports</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Connexion directe à l'Internet"
#: ../gtk/parameters.ui.h:30
#: ../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:31
#: ../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:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "Derrière un pare-feu (utiliser ICE)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "Derrière un pare-feu (utiliser uPnP)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Adresse IP publique:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "Serveur STUN:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>Paramètres liés au pare-feu</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Paramètres réseau"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Sonnerie:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Appareil ALSA spécifique (optionnel) :"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Périphérique de capture:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Périphérique de sonnerie:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Périphérique d'écoute:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Activer l'annulation d'écho"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Son</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Périphérique d'entrée vidéo"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Résolution de vidéo préférée:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr "Type de rendu video:"
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr "Afficher la vidéo"
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Video</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Identité par défaut</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Comptes SIP via des proxy</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Sécurité</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Gérer mes comptes SIP"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Activer"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Désactiver"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Codecs</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "Indiquez 0 pour ne pas mettre de limite"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Limite de débit montant en kbits/sec:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Limite de débit descendant en kbits/sec:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Activer le control de débit adaptatif."
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1439,47 +1475,47 @@ msgstr ""
"de l'audio et de la video en fonction de la bande passante disponible, "
"durant l'appel.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Gestion de la bande passante</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Codecs"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Langue</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Montrer les réglages avancés"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Niveau</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Interface utilisateur"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr "Adresse du serveur:"
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr "Méthode d'authentification:"
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr "<b>Configuration LDAP</b>"
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr "LDAP"
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Fermer"
@ -1712,56 +1748,56 @@ msgstr ""
msgid "Ready"
msgstr "Prêt."
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr "Configuration en cours"
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Recherche de la destination du numéro de téléphone..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "La destination n'a pu être trouvée."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Appel de"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Echec de l'appel"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
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:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "vous appelle"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "et sollicite un décrochage automatique."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Modifications des paramètres d'appels..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "En ligne."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Appel abandonné"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "La mise en attente a échoué"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Mise en attente de l'appel..."
@ -1825,7 +1861,7 @@ msgstr "En congé"
msgid "Unknown status"
msgstr "Status inconnu"
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1833,7 +1869,7 @@ msgstr ""
"L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" suivie "
"par un nom de domaine."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1842,7 +1878,7 @@ msgstr ""
"Elle doit être de la forme sip:username@domain, comme par example sip:"
"alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Echec de la connexion en tant que %s"
@ -1882,7 +1918,7 @@ msgstr "Appel répondu par %s."
msgid "Incompatible, check codecs or security settings..."
msgstr "Incompatible, vérfiez les codecs ou les paramètres de sécurité..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Paramètres media incompatibles."
@ -1925,43 +1961,43 @@ msgstr "Appel décliné."
msgid "Request timeout."
msgstr "Délai d'attente de la requête dépassé."
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Redirection"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "L'appel a échoué."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Enregistrement sur %s effectué."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Désenregistrement sur %s effectué."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "Pas de réponse"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Echec de l'enregistrement sur %s: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr "Service indisponible, nouvelle tentative"
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Le jeton d'authentification est %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1980,6 +2016,10 @@ msgstr "terminé"
msgid "missed"
msgstr "manqué"
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr "inconnu"
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

322
po/he.po
View file

@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/linphone-gtk/"
"language/he/)\n"
@ -98,45 +98,49 @@ msgstr "לא ניתן למצוא קובץ pixmap: %s"
msgid "Invalid sip contact !"
msgstr "כתובת sip לא תקפה !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr ""
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr ""
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr ""
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -149,7 +153,7 @@ msgstr ""
"שלך ?\n"
"היה ותשובתך תהיה לא, אדם זה יהיה מסומן באופן זמני ברשימה השחורה."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
@ -158,59 +162,59 @@ msgstr ""
"אנא הזן סיסמה עבור משתמש <i>%s</i>\n"
"במתחם <i>%s</i>:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "שגיאת קריאה"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "שיחה הסתיימה"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "קריאה נכנסת"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "לענות"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "לדחות"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "שיחה הושהתה"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>על ידי %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "%s רוצה להתחיל וידאו. האם אתה מסכים ?"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "קישור אתר רשת"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - וידאופון אינטרנטי"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (ברירת מחדל)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "אנחנו מועברים אל %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -218,7 +222,7 @@ msgstr ""
"לא אותרו כרטיסי קול במחשב זה.\n"
"לא תהיה ביכולתך לשלוח או לקבל שיחות אודיו."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "וידאופון SIP חופשי"
@ -287,7 +291,7 @@ msgstr "פרמטרים"
msgid "Enabled"
msgstr "מופעל"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "לא מופעל"
@ -450,7 +454,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr "הזן את שם משתמשך אצל linphone.org"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "שם משתמש:"
@ -640,7 +644,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr "%.3f שניות"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "נתק"
@ -777,6 +781,18 @@ msgstr "טוב"
msgid "Too loud"
msgstr "חזק מדי"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -795,6 +811,10 @@ msgstr ""
msgid "No voice"
msgstr "אין קול"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "התקן השמעה"
@ -811,6 +831,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "הבא נתחיל את Linphone עכשיו"
@ -1200,210 +1228,218 @@ msgid "<b>Transport</b>"
msgstr "<b>טרנספורט</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "סוג הצפנת מדיה"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "וידאו RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "אודיו RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "מקובע"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "הצפנת מדיה הינה מנדטורית"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "מינהור"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "שדות DSCP"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "אודיו RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "מקובע"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "וידאו RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "סוג הצפנת מדיה"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "הצפנת מדיה הינה מנדטורית"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "מינהור"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "שדות DSCP"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>פרוטוקולי רשת תקשורת ופורטים</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "חיבור ישיר אל האינטרנט"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "מאחורי NAT / חומת אש (בעזרת STUN לפתירה)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "מאחורי NAT / חומת אש (בעזרת ICE)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "מאחורי NAT / חומת אש (בעזרת uPnP)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "כתובת IP פומבית:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "שרת STUN:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT וחומת אש</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "הגדרות רשת תקשורת"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "צליל צלצול:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "התקן ALSA מיוחד (רשות):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "התקן לכידה:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "התקן צלצול:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "התקן פס קול:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "אפשר ביטול הד"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>אודיו</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "התקן קלט וידאו:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "רזולוציית וידאו מועדפת:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>וידאו</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>זהות משתמטת</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>חשבונות Proxy</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>פרטיות</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "ניהול חשבונות SIP"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "אפשר"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "נטרל"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>קודקים</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 מסמל \"בלי הגבלה\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "מגבלת מהירות העלאה בקי״ב/שנ׳:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "מגבלת מהירות הורדה בקי״ב/שנ׳:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "אפשר בקרת קצב מסתגלת"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1411,47 +1447,47 @@ msgstr ""
"<i>בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה.</"
"i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>בקרת רוחב פס</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "קודקים"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>שפה</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "הצג הגדרות מתקדמות"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>רמה</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "ממשק משתמש"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "סיום"
@ -1677,56 +1713,56 @@ msgstr ""
msgid "Ready"
msgstr "מוכן"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "מחפש כעת עבור יעד מספר טלפון..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "לא ניתן לפתור את מספר זה."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "מתקשר כעת"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "לא ניתן להתקשר"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "מתקשר/ת אליך"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " ומבקש/ת מענה אוטומטי."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "מתאים כעת פרמטרים של שיחה..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "מקושר."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "קריאה בוטלה"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "לא ניתן להשהות את השיחה"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "משהה כעת שיחה נוכחית..."
@ -1790,14 +1826,14 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
"כתובת sip proxy שהזנת הינה שגויה, זו צריכה להתחיל עם‭\"sip:\" לאחר שם מארח."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1805,7 +1841,7 @@ msgstr ""
"זהות sip שהוזנה הינה שגויה.\n"
"זו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "לא ניתן להתחבר בזהות %s"
@ -1845,7 +1881,7 @@ msgstr "קריאה נענתה על ידי %s."
msgid "Incompatible, check codecs or security settings..."
msgstr "חוסר תאימות, בדוק קודקים או הגדרות אבטחה..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "פרמטריי מדיה חסרי תואמים."
@ -1888,43 +1924,43 @@ msgstr "קריאה סורבה."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "מכוון מחדש"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "קריאה נכשלה."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "רישום אצל %s הושלם בהצלחה."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "אי רישום אצל %s סוים."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "אין היענות תוך זמן מוגדר"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "רישום אצל %s נכשל: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "אות האימות הינה %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1943,6 +1979,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

322
po/hu.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Hungarian (http://www.transifex.com/projects/p/linphone-gtk/"
"language/hu/)\n"
@ -92,31 +92,31 @@ msgstr "Nemtalálható a pixmap fájl: %s"
msgid "Invalid sip contact !"
msgstr "Érvénytelen sip partner !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
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:114
#: ../gtk/main.c:116
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:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Linphone indítása, videó kikpacsolva. "
#: ../gtk/main.c:128
#: ../gtk/main.c:130
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:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "Cím azonnali híváshoz"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "Bekapcsolva automatikusan válaszol a bejövő hívásokra"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -124,15 +124,19 @@ 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:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -145,66 +149,66 @@ msgstr ""
"szeretné adni a partnerlistához?\n"
"Ha nemmel válaszol, ez a személy átmenetileg tiltólistára kerül."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Hiba a hívás közben"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Hívás vége"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Beérkező hívás"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Hívás fogadása"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Elutasítás"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Hívás várakoztatva"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>a következő által: %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "%s szerené elidítani a videót. Elfogadja?"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Internetes oldal"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - internetes videó telefon"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Alapértelmezett)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Át vagyunk irányítva ide: %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -212,7 +216,7 @@ msgstr ""
"Hangkártya nincs érzékelve ezen a számítógépen.\n"
"Nem fog tudni hang hívásokat küldeni vagy fogadni."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Egy ingyenes SIP video-telefon"
@ -281,7 +285,7 @@ msgstr "Paraméterek"
msgid "Enabled"
msgstr "Engedélyezve"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Tiltva"
@ -446,7 +450,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr "Adja meg linphone.org felhasználónevét"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Felhasználónév:"
@ -638,7 +642,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr "%.3f másodperc"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Befejezés"
@ -775,6 +779,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -793,6 +809,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -809,6 +829,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1200,210 +1228,218 @@ msgid "<b>Transport</b>"
msgstr "<b>Átvitel</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Média titkosítás típusa"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Videó RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Audió RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Javítva"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Média titkosítás kötelező"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Alagút"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "DSCP mezők"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Audió RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Javítva"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Videó RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Média titkosítás típusa"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Média titkosítás kötelező"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Alagút"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "DSCP mezők"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Hálózati protokoll és port</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Közvetlen Internet kapcsolat"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:31
#: ../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:32
#: ../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:33
#: ../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:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Publikus IP cím:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN kiszolgáló:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT és tűzfal</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Hálózati beállítások"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Csengőhang:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Különleges ALSA eszköz (nem kötelező):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Felvevő hang eszköz:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Csengőhang eszköz:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Lejátszó hang eszköz:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Visszhang-elnyomás engedélyezése"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Audió</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Videó bemeneti eszköz:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Kívánt videó felbontás:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Videó</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Alapértelmezett identitás</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Proxy fiókok</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Titoktartás</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "SIP fiókok beállítása"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Engedélyezés"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Tiltás"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Kódekek</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "A 0 jelentése \"végtelen\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Feltöltési sebesség korlát (kbit/mp):"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Letöltési sebesség korlát (kbit/mp):"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Alkalmazkodó mérték-szabályozás engedélyezése"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1411,47 +1447,47 @@ msgstr ""
"<i>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.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Sávszélesség szabályozása</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Kódekek"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Nyelv</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Haladó beállítások megjelenítése"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Szint</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Felhasználói környezet"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Kész"
@ -1677,56 +1713,56 @@ msgstr ""
msgid "Ready"
msgstr "Kész"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Telefonszám-cél keresése..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Nem sikkerült értelmezni a számot."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Kapcsolódás"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Nem sikerült hívni"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
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:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "kapcsolatba lépett veled."
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "és automatikus választ kért."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "A hívási jellemzők módosítása..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Kapcsolódva."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Hívás megszakítva"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Nem sikerült várakoztatni a hívást"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Jelenlegi hívás várakoztatásának aktiválása..."
@ -1790,7 +1826,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1798,7 +1834,7 @@ msgstr ""
"Az Ön által megadott SIP proxy cím érvénytelen. \"sip:\"-tal kell kezdődnie, "
"ezt egy hosztnév követi."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1807,7 +1843,7 @@ msgstr ""
"Így kéne kinéznie: sip:felhasznalonev@proxytartomany, például sip:"
"aladar@pelda.hu"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Nem sikerült belépni ezzel: %s"
@ -1848,7 +1884,7 @@ 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:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Nem kompatibilis médiajellemzők."
@ -1891,43 +1927,43 @@ msgstr "Hívás elutasítva"
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Átirányítva"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Nem sikerült a hívás."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "A regisztáció a %s -n sikerült."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "A kiregisztrálás kész a következőn: %s ."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "időtúllépés után nincs válasz"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "A regisztáció a %s -n nem sikerült: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Hitelesítési jel: %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1946,6 +1982,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

326
po/it.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Italian (http://www.transifex.com/projects/p/linphone-gtk/"
"language/it/)\n"
@ -92,45 +92,49 @@ msgstr ""
msgid "Invalid sip contact !"
msgstr "Contatto SIP non valido"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr ""
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr ""
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr ""
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -142,72 +146,72 @@ msgstr ""
"veda il tuo stato o aggiungerlo alla tua lista dei contatti Se rispondi no "
"questo utente sarà momentaneamente bloccato."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Chiamata terminata"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Chimata in entrata"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Rifiuta"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr ""
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr ""
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Default)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
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:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr ""
@ -276,7 +280,7 @@ msgstr "Parametri"
msgid "Enabled"
msgstr "Attivato"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Disattivato"
@ -439,7 +443,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Manuale utente"
@ -623,7 +627,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -758,6 +762,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -776,6 +792,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -792,6 +812,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1181,257 +1209,265 @@ msgid "<b>Transport</b>"
msgstr "<b>Transporto</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Audio RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgstr "Connessione diretta a internet"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Dietro NAT / Firewall (utilizza STUN)"
msgid "Direct connection to the Internet"
msgstr "Connessione diretta a internet"
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Dietro NAT / Firewall (utilizza STUN)"
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Indirizzo ip pubblico:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "Stun server:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT and Firewall</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Impostazioni di rete"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Suoneria:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Dispositivo ALSA (optional):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Dispositivo microfono:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Dispositivo squillo:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Dispositivo uscita audio:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Attiva cancellazione eco"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Audio</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Dispositivo Video:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Risoluzione video preferita"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Video</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Identità di default</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Account proxy</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Privacy</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Gestici SIP Account"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Attivato"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Disattivato"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Codecs</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 sta per illimitato"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Velocità massima in upload Kbit/sec:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Velocita massima in Dowload Kbit/sec"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Gestione banda</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Codec"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Linguaggio</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr ""
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr ""
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Interfaccia utente"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Fatto"
@ -1657,56 +1693,56 @@ msgstr ""
msgid "Ready"
msgstr "Pronto"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Ricerca numero destinazione..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Impossibile risolvere il numero."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "In connessione"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr ""
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Connessione"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1770,7 +1806,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1778,7 +1814,7 @@ msgstr ""
"L'indirizzo sip proxy utilizzato è invalido, deve iniziare con \"sip:\" "
"seguito dall' hostaname."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1786,7 +1822,7 @@ msgstr ""
"L'identità sip utilizza è invalida.\n"
"Dovrebbre essere sip:username@proxydomain, esempio: sip:alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "impossibile login come %s"
@ -1826,7 +1862,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1869,43 +1905,43 @@ msgstr "Chiamata rifiutata"
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr ""
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registrazione su %s attiva"
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Unregistrazione su %s"
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "timeout no risposta"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Registrazione su %s fallita: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1924,6 +1960,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

478
po/ja.po

File diff suppressed because it is too large Load diff

View file

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/"
"p/linphone-gtk/language/nb_NO/)\n"
@ -93,31 +93,31 @@ msgstr "Fant ikke pixmap fli: %s"
msgid "Invalid sip contact !"
msgstr "Ugyldig SIP kontakt !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "skriv logg-informasjon under kjøring"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "Start skjult i systemkurven, ikke vis programbildet."
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "address som skal ringes nå"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "besvarer innkommende samtaler automatisk om valgt"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -125,15 +125,19 @@ msgstr ""
"Spesifiser arbeidsmappe (bør være base for installasjonen, f.eks: c:"
"\\Programfiler\\Linphone)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -146,66 +150,66 @@ msgstr ""
"din kontaktliste?\n"
"Hvis du svarer nei vil personen bli svartelyst midlertidig."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Samtale avsluttet"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Innkommende samtale"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Svarer"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Avvis"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Peker til nettsted"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - en video Internet telefon"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Standard)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Vi er overført til %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -213,7 +217,7 @@ msgstr ""
"Klarte ikke å finne noe lydkort på denne datamaskinen.\n"
"Du vil ikke kunne sende eller motta lydsamtaler."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "En gratis SIP video-telefon"
@ -282,7 +286,7 @@ msgstr "Parametere"
msgid "Enabled"
msgstr "På"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Av"
@ -445,7 +449,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Brukernavn:"
@ -629,7 +633,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -764,6 +768,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -782,6 +798,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -798,6 +818,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1189,256 +1217,264 @@ msgid "<b>Transport</b>"
msgstr "<b>Transport</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Lyd RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Lyd RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Video RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgstr "Tilkoblet Internett direkte"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Bak NAT / Brannmur (bruk STUN for å avgjøre)"
msgid "Direct connection to the Internet"
msgstr "Tilkoblet Internett direkte"
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../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:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Offentlig IP-addresse:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN tjener:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT og Brannvegg</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Nettverksinnstillinger"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Ringelyd:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Spesiell ALSA enhet (valgfritt):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Mikrofonenhet:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Ringe-enhet:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Avspillingsenhet:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Bruk ekko-kansellering"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Lyd</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Videoenhet:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Foretrukke video-oppløsning:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Video</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Standard identitet</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Proxy kontoer</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Personvern</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Behandle SIP-kontoer"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Aktiver"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Deaktiver"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Kodeker</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 betyr \"ubegrenset\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Maks opplastningshastighet i Kbit/sek:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Nedlastningsbegrensning i Kbit/sek:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Båndbreddekontrol</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Kodek"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Språk</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Vis avanserte innstillinger"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Nivå</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Brukergrensesnitt"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Ferdig"
@ -1664,56 +1700,56 @@ msgstr ""
msgid "Ready"
msgstr "Klar"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Ser etter telefonnummer for destinasjonen..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Kan ikke tilkoble dette nummeret."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Tilknytter"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Kunne ikke ringe"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "Beklager, du har nådd maksimalt antall samtidige samtaler"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "Kontakter deg."
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " og ba om autosvar."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Endrer ringeparametre..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Tilkoblet"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Samtale avbrutt"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Kunne ikke pause samtalen"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Pauser nåværende samtale"
@ -1777,7 +1813,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1785,7 +1821,7 @@ msgstr ""
"SIP proxy adressen du har angitt er ugyldig, den må begynne med \"sip:\" "
"etterfult av vertsnavn."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1793,7 +1829,7 @@ msgstr ""
"SIP adressen du har angitt er feil. Adressen bør se ut som sip: "
"brukernavn@domenenavn, f.eks sip:ola@eksempel.no"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Ikke ikke logge inn som %s"
@ -1833,7 +1869,7 @@ msgstr "Samtale besvart av %s."
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1876,43 +1912,43 @@ msgstr "Samtale avvist."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Omdirigert"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Samtale feilet."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registrering hos %s lykkes."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Avregistrering hos %s lykkes."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "ingen svar innen angitt tid"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Registrering hos %s mislykkes: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1931,6 +1967,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

326
po/nl.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Dutch (http://www.transifex.com/projects/p/linphone-gtk/"
"language/nl/)\n"
@ -92,45 +92,49 @@ msgstr "Kon pixmap bestand %s niet vinden"
msgid "Invalid sip contact !"
msgstr ""
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr ""
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr ""
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr ""
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -139,72 +143,72 @@ msgid ""
"If you answer no, this person will be temporarily blacklisted."
msgstr ""
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Oproep beeindigd"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Inkomende oproep"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr ""
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr ""
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr ""
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
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:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Een Vrije SIP video-telefoon"
@ -273,7 +277,7 @@ msgstr "Parameters"
msgid "Enabled"
msgstr "Aan"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Uit"
@ -434,7 +438,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr ""
@ -618,7 +622,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -753,6 +757,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -771,6 +787,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -787,6 +807,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1176,256 +1204,264 @@ msgid "<b>Transport</b>"
msgstr ""
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgid "Direct connection to the Internet"
msgstr ""
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use uPnP)"
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr ""
#: ../gtk/parameters.ui.h:34
msgid "Public IP address:"
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Stun server:"
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:36
msgid "<b>NAT and Firewall</b>"
msgid "Public IP address:"
msgstr ""
#: ../gtk/parameters.ui.h:37
msgid "Network settings"
msgid "Stun server:"
msgstr ""
#: ../gtk/parameters.ui.h:38
msgid "Ring sound:"
msgid "<b>NAT and Firewall</b>"
msgstr ""
#: ../gtk/parameters.ui.h:39
msgid "ALSA special device (optional):"
msgid "Network settings"
msgstr ""
#: ../gtk/parameters.ui.h:40
msgid "Capture device:"
msgid "Ring sound:"
msgstr ""
#: ../gtk/parameters.ui.h:41
msgid "Ring device:"
msgid "ALSA special device (optional):"
msgstr ""
#: ../gtk/parameters.ui.h:42
msgid "Playback device:"
msgid "Capture device:"
msgstr ""
#: ../gtk/parameters.ui.h:43
msgid "Enable echo cancellation"
msgid "Ring device:"
msgstr ""
#: ../gtk/parameters.ui.h:44
msgid "<b>Audio</b>"
msgid "Playback device:"
msgstr ""
#: ../gtk/parameters.ui.h:45
msgid "Video input device:"
msgid "Enable echo cancellation"
msgstr ""
#: ../gtk/parameters.ui.h:46
msgid "Prefered video resolution:"
msgid "<b>Audio</b>"
msgstr ""
#: ../gtk/parameters.ui.h:47
msgid "Video output method:"
msgid "Video input device:"
msgstr ""
#: ../gtk/parameters.ui.h:48
msgid "<b>Video</b>"
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 "<b>Video</b>"
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 "<b>Default identity</b>"
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 "Bewerken"
msgid "<b>Default identity</b>"
msgstr ""
#: ../gtk/parameters.ui.h:58
msgid "Remove"
msgstr "Verwijderen"
msgid "Wizard"
msgstr ""
#: ../gtk/parameters.ui.h:59
msgid "<b>Proxy accounts</b>"
msgid "Add"
msgstr ""
#: ../gtk/parameters.ui.h:60
msgid "Edit"
msgstr "Bewerken"
#: ../gtk/parameters.ui.h:61
msgid "Remove"
msgstr "Verwijderen"
#: ../gtk/parameters.ui.h:62
msgid "<b>Proxy accounts</b>"
msgstr ""
#: ../gtk/parameters.ui.h:63
msgid "Erase all passwords"
msgstr ""
#: ../gtk/parameters.ui.h:61
#: ../gtk/parameters.ui.h:64
msgid "<b>Privacy</b>"
msgstr ""
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr ""
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Aan"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Uit"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr ""
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr ""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr ""
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr ""
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr ""
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr ""
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr ""
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr ""
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr ""
@ -1651,56 +1687,56 @@ msgstr ""
msgid "Ready"
msgstr "Gereed."
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Zoekt de lokatie van het telefoonnummer..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Kon dit nummer niet vinden."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Verbinden"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr ""
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Verbonden."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1764,19 +1800,19 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
msgstr ""
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr ""
@ -1816,7 +1852,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1859,43 +1895,43 @@ msgstr "Oproep geweigerd."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr ""
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registratie op %s gelukt."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr ""
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr ""
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr ""
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1914,6 +1950,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

322
po/pl.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/"
"language/pl/)\n"
@ -95,45 +95,49 @@ msgstr "Nie można znaleźć pixmapy: %s"
msgid "Invalid sip contact !"
msgstr ""
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr ""
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr ""
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr ""
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -142,72 +146,72 @@ msgid ""
"If you answer no, this person will be temporarily blacklisted."
msgstr ""
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr ""
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr ""
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr ""
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr ""
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr ""
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
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:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr ""
@ -276,7 +280,7 @@ msgstr "Parametr"
msgid "Enabled"
msgstr "Włączone"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Wyłączone"
@ -438,7 +442,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr ""
@ -622,7 +626,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -757,6 +761,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -775,6 +791,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -791,6 +811,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1180,256 +1208,264 @@ msgid "<b>Transport</b>"
msgstr ""
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgid "Direct connection to the Internet"
msgstr ""
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use uPnP)"
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr ""
#: ../gtk/parameters.ui.h:34
msgid "Public IP address:"
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Stun server:"
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:36
msgid "<b>NAT and Firewall</b>"
msgid "Public IP address:"
msgstr ""
#: ../gtk/parameters.ui.h:37
msgid "Network settings"
msgid "Stun server:"
msgstr ""
#: ../gtk/parameters.ui.h:38
msgid "Ring sound:"
msgid "<b>NAT and Firewall</b>"
msgstr ""
#: ../gtk/parameters.ui.h:39
msgid "ALSA special device (optional):"
msgid "Network settings"
msgstr ""
#: ../gtk/parameters.ui.h:40
msgid "Capture device:"
msgid "Ring sound:"
msgstr ""
#: ../gtk/parameters.ui.h:41
msgid "Ring device:"
msgid "ALSA special device (optional):"
msgstr ""
#: ../gtk/parameters.ui.h:42
msgid "Playback device:"
msgid "Capture device:"
msgstr ""
#: ../gtk/parameters.ui.h:43
msgid "Enable echo cancellation"
msgid "Ring device:"
msgstr ""
#: ../gtk/parameters.ui.h:44
msgid "<b>Audio</b>"
msgid "Playback device:"
msgstr ""
#: ../gtk/parameters.ui.h:45
msgid "Video input device:"
msgid "Enable echo cancellation"
msgstr ""
#: ../gtk/parameters.ui.h:46
msgid "Prefered video resolution:"
msgid "<b>Audio</b>"
msgstr ""
#: ../gtk/parameters.ui.h:47
msgid "Video output method:"
msgid "Video input device:"
msgstr ""
#: ../gtk/parameters.ui.h:48
msgid "<b>Video</b>"
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 "<b>Video</b>"
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 "<b>Default identity</b>"
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 "<b>Default identity</b>"
msgstr ""
#: ../gtk/parameters.ui.h:58
msgid "Remove"
msgid "Wizard"
msgstr ""
#: ../gtk/parameters.ui.h:59
msgid "<b>Proxy accounts</b>"
msgid "Add"
msgstr ""
#: ../gtk/parameters.ui.h:60
msgid "Erase all passwords"
msgid "Edit"
msgstr ""
#: ../gtk/parameters.ui.h:61
msgid "<b>Privacy</b>"
msgid "Remove"
msgstr ""
#: ../gtk/parameters.ui.h:62
msgid "<b>Proxy accounts</b>"
msgstr ""
#: ../gtk/parameters.ui.h:63
msgid "Erase all passwords"
msgstr ""
#: ../gtk/parameters.ui.h:64
msgid "<b>Privacy</b>"
msgstr ""
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr ""
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Włączony"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Wyłącz"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr ""
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr ""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr ""
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr ""
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr ""
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr ""
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr ""
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr ""
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr ""
@ -1655,56 +1691,56 @@ msgstr ""
msgid "Ready"
msgstr ""
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr ""
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr ""
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr ""
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr ""
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Połączony"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1768,19 +1804,19 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
msgstr ""
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr ""
@ -1820,7 +1856,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1863,43 +1899,43 @@ msgstr "Rozmowa odrzucona."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr ""
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr ""
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr ""
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr ""
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr ""
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1919,6 +1955,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
"linphone-gtk/language/pt_BR/)\n"
@ -92,45 +92,49 @@ msgstr "Não é possível achar arquivo pixmap: %s"
msgid "Invalid sip contact !"
msgstr ""
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr ""
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr ""
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr ""
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
msgstr ""
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -139,72 +143,72 @@ msgid ""
"If you answer no, this person will be temporarily blacklisted."
msgstr ""
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr ""
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Camadas recebidas"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr ""
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr ""
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr ""
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
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:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr ""
@ -273,7 +277,7 @@ msgstr "Parâmetros"
msgid "Enabled"
msgstr "Ativado"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Desativado"
@ -434,7 +438,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr ""
@ -618,7 +622,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -753,6 +757,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -771,6 +787,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -787,6 +807,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1176,256 +1204,264 @@ msgid "<b>Transport</b>"
msgstr ""
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgid "Direct connection to the Internet"
msgstr ""
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use uPnP)"
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr ""
#: ../gtk/parameters.ui.h:34
msgid "Public IP address:"
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Stun server:"
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:36
msgid "<b>NAT and Firewall</b>"
msgid "Public IP address:"
msgstr ""
#: ../gtk/parameters.ui.h:37
msgid "Network settings"
msgid "Stun server:"
msgstr ""
#: ../gtk/parameters.ui.h:38
msgid "Ring sound:"
msgid "<b>NAT and Firewall</b>"
msgstr ""
#: ../gtk/parameters.ui.h:39
msgid "ALSA special device (optional):"
msgid "Network settings"
msgstr ""
#: ../gtk/parameters.ui.h:40
msgid "Capture device:"
msgid "Ring sound:"
msgstr ""
#: ../gtk/parameters.ui.h:41
msgid "Ring device:"
msgid "ALSA special device (optional):"
msgstr ""
#: ../gtk/parameters.ui.h:42
msgid "Playback device:"
msgid "Capture device:"
msgstr ""
#: ../gtk/parameters.ui.h:43
msgid "Enable echo cancellation"
msgid "Ring device:"
msgstr ""
#: ../gtk/parameters.ui.h:44
msgid "<b>Audio</b>"
msgid "Playback device:"
msgstr ""
#: ../gtk/parameters.ui.h:45
msgid "Video input device:"
msgid "Enable echo cancellation"
msgstr ""
#: ../gtk/parameters.ui.h:46
msgid "Prefered video resolution:"
msgid "<b>Audio</b>"
msgstr ""
#: ../gtk/parameters.ui.h:47
msgid "Video output method:"
msgid "Video input device:"
msgstr ""
#: ../gtk/parameters.ui.h:48
msgid "<b>Video</b>"
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 "<b>Video</b>"
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 "<b>Default identity</b>"
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 "<b>Default identity</b>"
msgstr ""
#: ../gtk/parameters.ui.h:58
msgid "Remove"
msgstr "Remover"
msgid "Wizard"
msgstr ""
#: ../gtk/parameters.ui.h:59
msgid "<b>Proxy accounts</b>"
msgid "Add"
msgstr ""
#: ../gtk/parameters.ui.h:60
msgid "Edit"
msgstr "Editar"
#: ../gtk/parameters.ui.h:61
msgid "Remove"
msgstr "Remover"
#: ../gtk/parameters.ui.h:62
msgid "<b>Proxy accounts</b>"
msgstr ""
#: ../gtk/parameters.ui.h:63
msgid "Erase all passwords"
msgstr ""
#: ../gtk/parameters.ui.h:61
#: ../gtk/parameters.ui.h:64
msgid "<b>Privacy</b>"
msgstr ""
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr ""
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Ativado"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Desativar"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr ""
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr ""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr ""
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr ""
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr ""
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr ""
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr ""
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr ""
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr ""
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr ""
@ -1651,56 +1687,56 @@ msgstr ""
msgid "Ready"
msgstr ""
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Procurando por telefone de destino..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
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:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr ""
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr ""
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Conectado."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1764,19 +1800,19 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
msgstr ""
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr ""
@ -1816,7 +1852,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1859,43 +1895,43 @@ msgstr ""
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr ""
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr ""
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr ""
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr ""
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr ""
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1914,6 +1950,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

356
po/ru.po
View file

@ -3,17 +3,18 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# a <loginov.alex.valer@gmail.com>, 2014
# a <loginov.alex.valer@gmail.com>, 2014
# AlexL <loginov.alex.valer@gmail.com>, 2014
# AlexL <loginov.alex.valer@gmail.com>, 2014-2015
# AlexL <loginov.alex.valer@gmail.com>, 2014
# Maxim Prokopyev <jazzelastic@gmail.com>, 2010
# Simon Morlat <linphone@free.fr>, 2001
msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-14 09:11+0000\n"
"Last-Translator: AlexL <loginov.alex.valer@gmail.com>\n"
"Language-Team: Russian (http://www.transifex.com/projects/p/linphone-gtk/"
"language/ru/)\n"
"Language: ru\n"
@ -101,33 +102,33 @@ msgstr "Невозможно найти графический файл: %s"
msgid "Invalid sip contact !"
msgstr "Неверный sip контакт!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr ""
"Вывод некоторой отладочной информации на устройство стандартного вывода во "
"время работы."
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "Путь к файлу для записи логов."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Запуск linphone с видео отключен."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "Показывать только в системном лотке, не запуская главное окно."
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "Адрес для звонка прямо сейчас."
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "Если установлено, то автоматический приём входящих звонков."
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -135,15 +136,19 @@ msgstr ""
"Определить рабочий каталог (относительно каталога установки, например: c:"
"\\Program Files\\Linphone)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr "Файл конфигурации"
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr "Запустить помощника аудио"
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr "Запустить самотест и выйти при успехе со статусом 0"
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -156,7 +161,7 @@ msgstr ""
"контактный лист?\n"
"Если вы ответите Нет, эта персона будет временно в чёрном списке."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
@ -165,59 +170,59 @@ msgstr ""
"Пожалуйста, введите пароль для пользователя <i>%s</i>\n"
" для реалм (рилм) <i>%s</i>:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Ошибка звонка"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Звонок окончен"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Входящий звонок"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Ответ"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Отклонить"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Звонок приостановлен"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>%s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "%s предложил запустить видео. Вы принимаете?"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Домашняя страница"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - интернет видео телефон"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (по умолчанию)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Мы передали в %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -225,7 +230,7 @@ msgstr ""
"Звуковые карты не были обнаружены на этом компьютере.\n"
"Вы не сможете отправлять или получать аудио звонки."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Свободный SIP видео-телефон"
@ -294,7 +299,7 @@ msgstr "Параметры"
msgid "Enabled"
msgstr "Разрешён"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Не разрешён"
@ -439,6 +444,8 @@ msgid ""
"Welcome!\n"
"This assistant will help you to use a SIP account for your calls."
msgstr ""
"Добро пожаловать!\n"
"Этот ассистент поможет вам использовать SIP аккаунт для ваших звонков."
#: ../gtk/setupwizard.c:43
msgid "Create an account on linphone.org"
@ -461,7 +468,7 @@ msgstr "Я хочу указать удалённую конфигурацию U
msgid "Enter your linphone.org username"
msgstr "Введите ваше имя пользователя для linphone.org"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Имя пользователя:"
@ -654,7 +661,7 @@ msgstr "%ix%i @ %f кадр/сек"
msgid "%.3f seconds"
msgstr "%.3f секунд"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Повесить трубку"
@ -791,11 +798,25 @@ msgstr "Хорошо"
msgid "Too loud"
msgstr "Слишком громко"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr "Вы слышали 3 сигнала?"
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr "Настройки звука не найдены"
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr "Не удаётся запустить системное управление звуком"
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
"This assistant will help you to configure audio settings for Linphone"
msgstr ""
"Добро пожаловать!\n"
"Этот ассистент поможет вам настроить настройки аудио для Linphone."
#: ../gtk/audio_assistant.c:328
msgid "Capture device"
@ -809,6 +830,10 @@ msgstr "Уровень записи"
msgid "No voice"
msgstr "Нет голоса"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr "Системные настройки звука"
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "Устройство воспроизведения"
@ -825,6 +850,14 @@ msgstr "Нажмите кнопку записи и скажите нескол
msgid "Listen to your record voice"
msgstr "Прослушайте ваш записанный голос"
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr "Запись"
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr "Воспроизведение"
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "Давайте сейчас запустим linphone"
@ -1003,7 +1036,7 @@ msgstr "Информация для входа"
#: ../gtk/main.ui.h:46
msgid "<b>Welcome!</b>"
msgstr ""
msgstr "<b>Добро пожаловать!</b>"
#: ../gtk/main.ui.h:47
msgid "Delete"
@ -1011,11 +1044,11 @@ msgstr "Удалить"
#: ../gtk/about.ui.h:1
msgid "About Linphone"
msgstr ""
msgstr "О Linphone"
#: ../gtk/about.ui.h:2
msgid "(C) Belledonne Communications, 2010\n"
msgstr ""
msgstr "(C) Belledonne Communications, 2010\n"
#: ../gtk/about.ui.h:4
msgid "An internet video phone using the standard SIP (rfc3261) protocol."
@ -1226,212 +1259,220 @@ msgid "<b>Transport</b>"
msgstr "<b>Транспорт</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Тип медиа-шифрования"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "Видео RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "Аудио RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Фиксированный"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Медиа-шифрование обязательно"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Тунель"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "Поля DSCP"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr "Порт SIP/TCP"
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr "Порт SIP/UDP"
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr "Случайно"
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr "Порт SIP/TCP"
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "Аудио RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Фиксированный"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "Видео RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Тип медиа-шифрования"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Медиа-шифрование обязательно"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Тунель"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "Поля DSCP"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Сетевые протоколы и порты</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Прямое подключение к интернет"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr "За NAT / брандмауэром (указать IP шлюза)"
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "За NAT / брандмауэром (использовать STUN)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "За NAT / брандмауэром (использовать ICE)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "За NAT / брандмауэром (использовать uPnP)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Выделенный (публичный) IP-адрес:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN сервер:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT и брандмауэр</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Настройки сети"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Мелодия звонка:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "Специальное устройство ALSA (опционально)"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Устройство захвата:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Устройство звонка:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Устройство воспроизведения:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Разрешить подавление эха"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Аудио</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Устройство для вывода видео:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Предпочтительное разрешение видео:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr "Метод вывода видео:"
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr "Показать предпросмотр с камеры"
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Видео</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Идентификатор по умолчанию</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Учётные записи</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Секретность</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Управление учётными записями SIP"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Разрешить"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Выключить"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Кодеки</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 означает \"безлимитный\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Ограничение исходящего потока КБит/сек:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Ограничение скорости входящего потока КБит/сек:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Разрешить адаптивное управление скоростью"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1439,47 +1480,47 @@ msgstr ""
"<i>Адаптивное управление скоростью - это технология динамического угадывания "
"доступной пропускной способности во время звонка.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Пропускная способность</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Кодеки"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Язык</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Показать дополнительные настройки"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Уровень</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Пользовательский интерфейс"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr "Адрес сервера:"
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr "Метод аутентификации:"
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr "<b>Установка учётной записи LDAP</b>"
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr "LDAP"
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Готово"
@ -1710,57 +1751,57 @@ msgstr "Пожалуйста, подождите пока получается
msgid "Ready"
msgstr "Готов"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr "Конфигурирование"
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Поиск назначения для телефонного номера.."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Не получилось принять решение по этому номеру."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Соединение"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Невозможно позвонить"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
"К сожалению, мы достигли максимального количества одновременных звонков"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "контактирует с вами"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "и спросил автоматический ответ."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Изменение параметров звонка..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Соединён."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Звонок отменён"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Невозможно приостановить звонок"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Приостановка текущего звонка..."
@ -1822,9 +1863,9 @@ msgstr "Отдых"
#: ../coreapi/friend.c:68
msgid "Unknown status"
msgstr ""
msgstr "Неизвестный статус"
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1832,7 +1873,7 @@ msgstr ""
"Введённый SIP-адрес прокси является недействительным, он должен начинаться с "
"\"sip:имя_хоста\""
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1841,7 +1882,7 @@ msgstr ""
"Должно выглядеть как sip:имя_пользователя@домен_прокси, как например, sip:"
"alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Невозможно зайти как: %s"
@ -1881,7 +1922,7 @@ msgstr "На звонок ответил %s."
msgid "Incompatible, check codecs or security settings..."
msgstr "Несовместимость, проверьте кодеки или параметры безопасности..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Несовместимость медиа-параметров."
@ -1924,43 +1965,43 @@ msgstr "Звонок отклонён."
msgid "Request timeout."
msgstr "Таймаут запроса."
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Переадресован"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Звонок не удался."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Регистрация на %s прошла успешно."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Отмена регистрации на %s завершена."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "время ожидания истекло"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Регистрация на %s не удалась: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr "Сервис недоступен, повтор"
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Маркер проверки подлинности: %s"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1970,15 +2011,19 @@ msgstr[2] "У вас %i пропущенных вызов."
#: ../coreapi/call_log.c:209
msgid "aborted"
msgstr ""
msgstr "прервано"
#: ../coreapi/call_log.c:212
msgid "completed"
msgstr ""
msgstr "завершено"
#: ../coreapi/call_log.c:215
msgid "missed"
msgstr ""
msgstr "пропущено"
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr "неизвестно"
#: ../coreapi/call_log.c:220
#, c-format
@ -1989,12 +2034,17 @@ msgid ""
"Status: %s\n"
"Duration: %i mn %i sec\n"
msgstr ""
"%s в %s\n"
"От: %s\n"
"До: %s\n"
"Статус: %s\n"
"Продолжительность: %i мин %i сек\n"
#: ../coreapi/call_log.c:221
msgid "Outgoing call"
msgstr ""
msgstr "Исходящий вызов"
#: ../gtk/videowindow.c:66
#, c-format
msgid "Cannot play %s."
msgstr ""
msgstr "Невозможно воспроизвести %s."

339
po/sr.po
View file

@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-13 16:34+0000\n"
"Last-Translator: Мирослав Николић <miroslavnikolic@rocketmail.com>\n"
"Language-Team: Serbian (http://www.transifex.com/projects/p/linphone-gtk/"
"language/sr/)\n"
"Language: sr\n"
@ -98,31 +98,31 @@ msgstr "Не могу да пронађем датотеку сличице: %s"
msgid "Invalid sip contact !"
msgstr "Неисправан сип контакт !"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "бележи на стандардни излаз неке податке прочишћавања док ради."
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr "путања до датотеке за уписивање дневника."
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr "Покреће линфон са искљученим видеом."
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "Покреће се само у системској фиоци, не приказује главно сучеље."
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "адреса за позивање управо сада"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "ако је подешено сам ће се јављати на долазне позиве"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -130,15 +130,19 @@ msgstr ""
"Наводи радни директоријум (треба да буде основа инсталације, нпр: „c:"
"\\Program Files\\Linphone“)"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr "Датотека подешавања"
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr "Покреће помоћника звука"
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr "Покреће самоиспробавање и излази 0 ако је успешно"
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -152,7 +156,7 @@ msgstr ""
"Ако одговорите са не, ова особа ће привремено бити стављена на списак "
"забрана."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
@ -161,59 +165,59 @@ msgstr ""
"Унесите вашу лозинку за корисничко име <i>%s</i>\n"
" на подручју <i>%s</i>:"
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr "Грешка позива"
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Позив је завршен"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Долазни позив"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "Јави се"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Одбиј"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr "Позив је заустављен"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr "<b>од %s</b>"
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr "%s предлаже да започнете видео. Да ли прихватате ?"
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Веза веб сајта"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Линфон — интернет телефон са снимком"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (основно)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "Преселили смо се на %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -221,7 +225,7 @@ msgstr ""
"Ниједна звучна картица није откривена на овом рачунару.\n"
"Нећете бити у могућности да шаљете или да примате звучне позиве."
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "Слободан СИП телефон са снимком"
@ -290,7 +294,7 @@ msgstr "Параметри"
msgid "Enabled"
msgstr "Укључено"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Искључено"
@ -457,7 +461,7 @@ msgstr "Желим да наведем удаљену путању подеша
msgid "Enter your linphone.org username"
msgstr "Унесите ваше корисничко име линфон.орг-а"
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Корисничко име:"
@ -649,7 +653,7 @@ msgstr "%ix%i @ %f к/с"
msgid "%.3f seconds"
msgstr "%.3f секунде"
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr "Прекини"
@ -786,6 +790,18 @@ msgstr "Добар"
msgid "Too loud"
msgstr "Сувише гласан"
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr "Да ли сте чули три писка ?"
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr "Нисам пронашао поставке звука "
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr "Не могу да покренем управљање звуком система "
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -806,6 +822,10 @@ msgstr "Снимљени волумен"
msgid "No voice"
msgstr "Нема гласа"
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr "Поставке звука система"
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr "Уређај за пуштање"
@ -822,6 +842,14 @@ msgstr "Притисните дугме за снимање и реците не
msgid "Listen to your record voice"
msgstr "Слушајте ваш снимљени глас"
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr "Сними"
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr "Пусти"
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr "Хајде сада да покренемо Линфон"
@ -1225,210 +1253,218 @@ msgid "<b>Transport</b>"
msgstr "<b>Пренос</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr "Врста шифровања медија"
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "РТП/УДП снимка:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "РТП/УДП звука:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr "Неизмењиво"
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr "Шифровање медија је обавезно"
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr "Тунел"
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr "ДСЦП поља"
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr "СИП/ТЦП прикључник"
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr "СИП/УДП прикључник"
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr "Насумично"
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr "СИП/ТЦП прикључник"
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "РТП/УДП звука:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr "Неизмењиво"
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "РТП/УДП снимка:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr "Врста шифровања медија"
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr "Шифровање медија је обавезно"
#: ../gtk/parameters.ui.h:28
msgid "Tunnel"
msgstr "Тунел"
#: ../gtk/parameters.ui.h:29
msgid "DSCP fields"
msgstr "ДСЦП поља"
#: ../gtk/parameters.ui.h:30
msgid "<b>Network protocol and ports</b>"
msgstr "<b>Мрежни протокол и прикључници</b>"
#: ../gtk/parameters.ui.h:29
#: ../gtk/parameters.ui.h:31
msgid "Direct connection to the Internet"
msgstr "Непосредна веза на Интернет"
#: ../gtk/parameters.ui.h:30
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr "Иза НАТ-а / мрежне баријере (наведите ИП мрежног пролаза)"
#: ../gtk/parameters.ui.h:31
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Иза НАТ-а / мрежне баријере (користите СТУН за решавање)"
#: ../gtk/parameters.ui.h:32
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr "Иза НАТ-а / мрежне баријере (користите ИЦЕ)"
#: ../gtk/parameters.ui.h:33
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr "Иза НАТ-а / мрежне баријере (користите уПнП)"
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Јавна ИП адреса:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "Стун сервер:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>НАТ и мрежна баријера</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Мрежа"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Звук звона:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "АЛСА-ин посебни уређај (изборно):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Уређај за снимање:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Уређај за звоно:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Уређај за пуштање:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Укључи поништавање одјека"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Звук</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Улазни уређај снимка:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Жељена резолуција снимка:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr "Начин излаза снимка:"
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr "Прикажи претпреглед камерице"
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Снимак</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Основни идентитет</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Посреднички налози</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Приватност</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "СИП налози"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Укључи"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Искључи"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Кодеци</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 значи „неограничено“"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Ограничи брзину слања на (Kb/s):"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Ограничи брзину преузимања на (Kb/s):"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr "Укључи прилагодљиво управљање протоком"
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
@ -1436,47 +1472,47 @@ msgstr ""
"<i>Прилагодљиво управљање протоком је техника за променљиво погађање "
"доступног пропусног опсега за време позива.</i>"
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Управљање пропусним опсегом</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Kодеци"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Језик</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Прикажи напредна подешавања"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Ниво</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Корисничко сучеље"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr "Адреса сервера:"
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr "Начин потврђивања идентитета:"
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr "<b>Подешавања ЛДАП налога</b>"
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr "ЛДАП"
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Готово"
@ -1707,56 +1743,56 @@ msgstr "Сачекајте док довучем подешавања са се
msgid "Ready"
msgstr "Спреман"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr "Подешавам"
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Тражим одредиште телефонског броја..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Не могу да решим овај број."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Ступам у везу"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "Не могу да позовем"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "Извините, достигли смо највећи број истовремених позива"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "вам се обраћа"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " и затражени само-одговор."
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "Мењам параметре позива..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Повезан сам."
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "Позив је прекинут"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "Не могу да зауставим позив"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "Заустављам тренутни позив..."
@ -1820,7 +1856,7 @@ msgstr "На одмору"
msgid "Unknown status"
msgstr "Непознато стање"
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1828,7 +1864,7 @@ msgstr ""
"Адреса сип посредника коју сте унели је неисправна, мора почети на „sip:“ за "
"којим следи назив домаћина."
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1837,7 +1873,7 @@ msgstr ""
"Треба да изгледа као „sip:корисник@домен-посредника, као што је „sip:"
"alice@example.net“"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Не могу да се пријавим као %s"
@ -1877,7 +1913,7 @@ msgstr "На позив је одговорио „%s“."
msgid "Incompatible, check codecs or security settings..."
msgstr "Несагласно, проверите кодеке или безбедносна подешавања..."
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr "Медијски параметри су несагласни."
@ -1920,43 +1956,43 @@ msgstr "Позив је одбијен."
msgid "Request timeout."
msgstr "Истекло је време захтева."
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "Преусмерен"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "Позив није успео."
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Уписивање на „%s“ је успело."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Исписивање са „%s“ је обављено."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "нема ограничења одговора"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Уписивање на „%s“ није успело: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr "Услуга није доступна, поново покушавам"
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr "Симбол потврђивања идентитета је „%s“"
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1966,15 +2002,19 @@ msgstr[2] "Пропустили сте %i позива."
#: ../coreapi/call_log.c:209
msgid "aborted"
msgstr ""
msgstr "прекинут"
#: ../coreapi/call_log.c:212
msgid "completed"
msgstr ""
msgstr "завршен"
#: ../coreapi/call_log.c:215
msgid "missed"
msgstr ""
msgstr "пропуштен"
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr "непознато"
#: ../coreapi/call_log.c:220
#, c-format
@ -1985,12 +2025,17 @@ msgid ""
"Status: %s\n"
"Duration: %i mn %i sec\n"
msgstr ""
"%s на %s\n"
"Позивач: %s\n"
"Позивник: %s\n"
"Стање: %s\n"
"Трајање: %i мин. %i сек.\n"
#: ../coreapi/call_log.c:221
msgid "Outgoing call"
msgstr ""
msgstr "Одлазни позив"
#: ../gtk/videowindow.c:66
#, c-format
msgid "Cannot play %s."
msgstr ""
msgstr "Не могу да пустим „%s“."

326
po/sv.po
View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Swedish (http://www.transifex.com/projects/p/linphone-gtk/"
"language/sv/)\n"
@ -92,31 +92,31 @@ msgstr "Kunde inte hitta pixmap filen: %s"
msgid "Invalid sip contact !"
msgstr "ogiltig SIP kontakt!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "skriv loggning information under körning"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "Starta ikonifierat, visa inte huvudfönstret"
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "Samtalsmottagare"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "Om på, besvara automatisk alla inkommande samtal"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
msgid ""
"Specifiy a working directory (should be the base of the installation, eg: c:"
"\\Program Files\\Linphone)"
@ -124,15 +124,19 @@ msgstr ""
"Välj en arbetskatalog som ska vara basen för installationen, såsom C:"
"\\Program\\Linphone"
#: ../gtk/main.c:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -145,72 +149,72 @@ msgstr ""
"henne till din kontaktlista?\n"
"Om du svarar nej, personen kommer att vara bannlyst."
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "Samtalet slut"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "Inkommande samtal"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "Avböj"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "Webbsajt"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - en video Internet telefon"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (Default)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
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:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "En gratis SIP video-telefon"
@ -279,7 +283,7 @@ msgstr "Parametrar"
msgid "Enabled"
msgstr "På"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "Av"
@ -442,7 +446,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "Användarnamn:"
@ -626,7 +630,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -761,6 +765,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -779,6 +795,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -795,6 +815,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1184,257 +1212,265 @@ msgid "<b>Transport</b>"
msgstr "<b>Transport</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgstr "Direkt förbindelse till Internet"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "Bakom en NAT / brandvägg (använd STUN för att avgöra adressen)"
msgid "Direct connection to the Internet"
msgstr "Direkt förbindelse till Internet"
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../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:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "Publik IP adress:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "STUN server:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT och Brandvägg</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "Nätverksinställningar"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "Ring signal:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "ALSA speciell enhet (tillval):"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "Mikrofon enhet:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "Ringning enhet:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "Uppspelningsenhet:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "Tillåta ekokancellering"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>Audio</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "Video ingångsenhet:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "Video upplösning:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>Video</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>Default identitet</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>Proxy konton</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>Integritet</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "Hantera SIP konton"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "Möjliggör"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "Inaktivera"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>Codecs</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 står för \"utan begränsning\""
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "Max upstream bandbreddshastighet i kbit/sek:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "Max downstream bandbreddshastighet i kbit/sek:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>Bandbreddskontroll</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "Codecs"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>Språk</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "Visa avancerade inställningar"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>Nivå</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "Användarinterface"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "Klar"
@ -1660,56 +1696,56 @@ msgstr ""
msgid "Ready"
msgstr "Redo"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "Leta efter telefonnummer för destinationen..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "Kan inte nå dett nummer."
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "Kontaktar"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr ""
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr ""
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "Kopplad"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1773,7 +1809,7 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
@ -1781,7 +1817,7 @@ msgstr ""
"SIP proxy adressen som du matade in är inte rätt, adressen måste starta med "
"\"sip:\", följd av ett hostnamn"
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1789,7 +1825,7 @@ msgstr ""
"SIP adressen som du matade in är inte rätt. Adressen borde se ut som sip:"
"namn@domän, såsom sip:peter@exempel.se"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "Kunde inte logga in som %s"
@ -1829,7 +1865,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1872,43 +1908,43 @@ msgstr "Samtalet avböjdes."
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr ""
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr ""
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "Registrering hos %s lyckades."
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "Avregistrering hos %s lyckades."
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "Inget svar inom angiven tid"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "Registrering hos %s mislyckades: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1927,6 +1963,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/linphone-"
"gtk/language/zh_CN/)\n"
@ -90,45 +90,49 @@ msgstr "无法打开位图文件:%s"
msgid "Invalid sip contact !"
msgstr "无效的 SIP 联系人!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "运行时向标准输出记录调试信息。"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "启动到系统托盘,不显示主界面。"
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "现在呼叫的地址"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "是否设置呼叫自动应答"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
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:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -140,66 +144,66 @@ msgstr ""
"您是否允许他看到您的在线状态或者将它加为您的联系人允许?\n"
"如果您回答否,则会将该人临时性的放入黑名单"
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "呼叫结束"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "呼入"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr ""
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "拒绝"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "网站"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - 互联网视频电话"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (默认)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr ""
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -207,7 +211,7 @@ msgstr ""
"未在此计算机上检测到声卡。\n"
"您无法发送或接收音频呼叫。"
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "免费的 SIP 视频电话"
@ -276,7 +280,7 @@ msgstr "参数"
msgid "Enabled"
msgstr "启用"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "禁用"
@ -438,7 +442,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "用户名:"
@ -622,7 +626,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -757,6 +761,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -775,6 +791,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -791,6 +811,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1180,256 +1208,264 @@ msgid "<b>Transport</b>"
msgstr "<b>传输协议</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "视频 RTP/UDP"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "音频 RTP/UDP"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "音频 RTP/UDP"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "视频 RTP/UDP"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgstr "直接连接到互联网"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "在 NAT 或防火墙后(使用 STUN 解决)"
msgid "Direct connection to the Internet"
msgstr "直接连接到互联网"
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "在 NAT 或防火墙后(使用 STUN 解决)"
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "公网 IP 地址:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "Stun 服务器:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT 及防火墙</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "网络设置"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "铃声文件:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "ALSA 特殊设备(可选)"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "录音设备:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "响铃设备:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "回放设备:"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "启用回声抑制"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>音频</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "视频输入设备:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "视频分辨率:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>视频</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>默认帐户</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>代理帐户</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>隐私</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "SIP 帐户管理"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "启用"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "禁用"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>编解码器</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 表示 “没有限制”"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "上传速率限制 kbit/s"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "下载速率限制 kbit/s"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>带宽控制</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "编解码器"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>语言</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "显示高级设置"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>级别</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "用户界面"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "完成"
@ -1655,56 +1691,56 @@ msgstr ""
msgid "Ready"
msgstr "就绪"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "查询电话号码目的地..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "该号码无法解析。"
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "联系中"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr ""
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr ""
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "正在联系您"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr " 并询问了自动回答。"
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr ""
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "已连接。"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr ""
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr ""
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr ""
@ -1768,13 +1804,13 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr "您输入的 SIP 代理地址无效它必须是以“sip:”开头,并紧随一个主机名。"
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1782,7 +1818,7 @@ msgstr ""
"您输入的地址无效。\n"
"它应具有“sip:用户名@代理域”的形式,例如 sip:alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "无法登录为 %s"
@ -1822,7 +1858,7 @@ msgstr ""
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1865,43 +1901,43 @@ msgstr "呼叫被拒绝。"
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "已重定向"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "呼叫失败。"
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "成功注册到 %s"
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "已在 %s 解除注册。"
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "没有响应,超时"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "注册到 %s 失败: %s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1919,6 +1955,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

View file

@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: linphone-gtk\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2014-12-01 14:27+0100\n"
"PO-Revision-Date: 2014-12-01 13:28+0000\n"
"POT-Creation-Date: 2015-01-13 16:18+0100\n"
"PO-Revision-Date: 2015-01-06 11:29+0000\n"
"Last-Translator: Gautier Pelloux-Prayer <gautier.pelloux@gmail.com>\n"
"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/"
"linphone-gtk/language/zh_TW/)\n"
@ -90,46 +90,50 @@ msgstr "找不到 pixmap 檔:%s"
msgid "Invalid sip contact !"
msgstr "無效的 sip 連絡人!"
#: ../gtk/main.c:107
#: ../gtk/main.c:109
msgid "log to stdout some debug information while running."
msgstr "執行時將一些除錯資訊記錄到標準輸出。"
#: ../gtk/main.c:114
#: ../gtk/main.c:116
msgid "path to a file to write logs into."
msgstr ""
#: ../gtk/main.c:121
#: ../gtk/main.c:123
msgid "Start linphone with video disabled."
msgstr ""
#: ../gtk/main.c:128
#: ../gtk/main.c:130
msgid "Start only in the system tray, do not show the main interface."
msgstr "只在系統匣啟動,不要顯示主要介面。"
#: ../gtk/main.c:135
#: ../gtk/main.c:137
msgid "address to call right now"
msgstr "現在要打電話的位址"
#: ../gtk/main.c:142
#: ../gtk/main.c:144
msgid "if set automatically answer incoming calls"
msgstr "如啟用此項,將會自動接聽來電"
#: ../gtk/main.c:149
#: ../gtk/main.c:151
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:156
#: ../gtk/main.c:158
msgid "Configuration file"
msgstr ""
#: ../gtk/main.c:163
#: ../gtk/main.c:165
msgid "Run the audio assistant"
msgstr ""
#: ../gtk/main.c:1085
#: ../gtk/main.c:172
msgid "Run self test and exit 0 if succeed"
msgstr ""
#: ../gtk/main.c:1083
#, c-format
msgid ""
"%s would like to add you to his contact list.\n"
@ -141,66 +145,66 @@ msgstr ""
"您是否要允許他看見您的上線狀態或將他加入您的連絡人清單?\n"
"如果您回答否,這個人會被暫時列入黑名單。"
#: ../gtk/main.c:1162
#: ../gtk/main.c:1160
#, c-format
msgid ""
"Please enter your password for username <i>%s</i>\n"
" at realm <i>%s</i>:"
msgstr ""
#: ../gtk/main.c:1283
#: ../gtk/main.c:1281
msgid "Call error"
msgstr ""
#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751
#: ../gtk/main.c:1284 ../coreapi/linphonecore.c:3767
msgid "Call ended"
msgstr "通話已結束"
#: ../gtk/main.c:1289 ../coreapi/call_log.c:221
#: ../gtk/main.c:1287 ../coreapi/call_log.c:221
msgid "Incoming call"
msgstr "來電"
#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
#: ../gtk/main.c:1289 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
msgid "Answer"
msgstr "接聽"
#: ../gtk/main.c:1293 ../gtk/main.ui.h:6
#: ../gtk/main.c:1291 ../gtk/main.ui.h:6
msgid "Decline"
msgstr "拒接"
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
msgid "Call paused"
msgstr ""
#: ../gtk/main.c:1299
#: ../gtk/main.c:1297
#, c-format
msgid "<b>by %s</b>"
msgstr ""
#: ../gtk/main.c:1366
#: ../gtk/main.c:1367
#, c-format
msgid "%s proposed to start video. Do you accept ?"
msgstr ""
#: ../gtk/main.c:1528
#: ../gtk/main.c:1529
msgid "Website link"
msgstr "網站連結"
#: ../gtk/main.c:1577
#: ../gtk/main.c:1578
msgid "Linphone - a video internet phone"
msgstr "Linphone - 網路視訊電話"
#: ../gtk/main.c:1669
#: ../gtk/main.c:1670
#, c-format
msgid "%s (Default)"
msgstr "%s (預設值)"
#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983
#: ../gtk/main.c:2002 ../coreapi/callbacks.c:986
#, c-format
msgid "We are transferred to %s"
msgstr "我們被轉接到 %s"
#: ../gtk/main.c:2016
#: ../gtk/main.c:2012
msgid ""
"No sound cards have been detected on this computer.\n"
"You won't be able to send or receive audio calls."
@ -208,7 +212,7 @@ msgstr ""
"在這臺電腦中偵測不到音效卡。\n"
"您將無法傳送或接收語音電話。"
#: ../gtk/main.c:2157
#: ../gtk/main.c:2156
msgid "A free SIP video-phone"
msgstr "自由的 SIP 視訊電話"
@ -277,7 +281,7 @@ msgstr "參數"
msgid "Enabled"
msgstr "已啟用"
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
msgid "Disabled"
msgstr "已停用"
@ -439,7 +443,7 @@ msgstr ""
msgid "Enter your linphone.org username"
msgstr ""
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
msgid "Username:"
msgstr "使用者名稱:"
@ -623,7 +627,7 @@ msgstr ""
msgid "%.3f seconds"
msgstr ""
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232
#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:235
msgid "Hang up"
msgstr ""
@ -758,6 +762,18 @@ msgstr ""
msgid "Too loud"
msgstr ""
#: ../gtk/audio_assistant.c:183
msgid "Did you hear three beeps ?"
msgstr ""
#: ../gtk/audio_assistant.c:292 ../gtk/audio_assistant.c:297
msgid "Sound preferences not found "
msgstr ""
#: ../gtk/audio_assistant.c:306
msgid "Cannot launch system sound control "
msgstr ""
#: ../gtk/audio_assistant.c:318
msgid ""
"Welcome!\n"
@ -776,6 +792,10 @@ msgstr ""
msgid "No voice"
msgstr ""
#: ../gtk/audio_assistant.c:334 ../gtk/audio_assistant.c:373
msgid "System sound preferences"
msgstr ""
#: ../gtk/audio_assistant.c:369
msgid "Playback device"
msgstr ""
@ -792,6 +812,14 @@ msgstr ""
msgid "Listen to your record voice"
msgstr ""
#: ../gtk/audio_assistant.c:405
msgid "Record"
msgstr ""
#: ../gtk/audio_assistant.c:406
msgid "Play"
msgstr ""
#: ../gtk/audio_assistant.c:433
msgid "Let's start Linphone now"
msgstr ""
@ -1181,256 +1209,264 @@ msgid "<b>Transport</b>"
msgstr "<b>傳輸</b>"
#: ../gtk/parameters.ui.h:19
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:20
msgid "Video RTP/UDP:"
msgstr "視訊 RTP/UDP:"
#: ../gtk/parameters.ui.h:21
msgid "Audio RTP/UDP:"
msgstr "音效 RTP/UDP:"
#: ../gtk/parameters.ui.h:22
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:24
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:26
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "SIP/UDP port"
msgstr ""
#: ../gtk/parameters.ui.h:21
msgid "Random"
msgstr ""
#: ../gtk/parameters.ui.h:22
msgid "SIP/TCP port"
msgstr ""
#: ../gtk/parameters.ui.h:23
msgid "Audio RTP/UDP:"
msgstr "音效 RTP/UDP:"
#: ../gtk/parameters.ui.h:24
msgid "Fixed"
msgstr ""
#: ../gtk/parameters.ui.h:25
msgid "Video RTP/UDP:"
msgstr "視訊 RTP/UDP:"
#: ../gtk/parameters.ui.h:26
msgid "Media encryption type"
msgstr ""
#: ../gtk/parameters.ui.h:27
msgid "Media encryption is mandatory"
msgstr ""
#: ../gtk/parameters.ui.h:28
msgid "<b>Network protocol and ports</b>"
msgid "Tunnel"
msgstr ""
#: ../gtk/parameters.ui.h:29
msgid "Direct connection to the Internet"
msgstr "直接連線到網際網路"
msgid "DSCP fields"
msgstr ""
#: ../gtk/parameters.ui.h:30
msgid "Behind NAT / Firewall (specify gateway IP )"
msgid "<b>Network protocol and ports</b>"
msgstr ""
#: ../gtk/parameters.ui.h:31
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)"
msgid "Direct connection to the Internet"
msgstr "直接連線到網際網路"
#: ../gtk/parameters.ui.h:32
msgid "Behind NAT / Firewall (use ICE)"
msgid "Behind NAT / Firewall (specify gateway IP )"
msgstr ""
#: ../gtk/parameters.ui.h:33
msgid "Behind NAT / Firewall (use STUN to resolve)"
msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)"
#: ../gtk/parameters.ui.h:34
msgid "Behind NAT / Firewall (use ICE)"
msgstr ""
#: ../gtk/parameters.ui.h:35
msgid "Behind NAT / Firewall (use uPnP)"
msgstr ""
#: ../gtk/parameters.ui.h:34
#: ../gtk/parameters.ui.h:36
msgid "Public IP address:"
msgstr "公共 IP 地址:"
#: ../gtk/parameters.ui.h:35
#: ../gtk/parameters.ui.h:37
msgid "Stun server:"
msgstr "Stun 伺服器:"
#: ../gtk/parameters.ui.h:36
#: ../gtk/parameters.ui.h:38
msgid "<b>NAT and Firewall</b>"
msgstr "<b>NAT 與防火牆</b>"
#: ../gtk/parameters.ui.h:37
#: ../gtk/parameters.ui.h:39
msgid "Network settings"
msgstr "網路設定值"
#: ../gtk/parameters.ui.h:38
#: ../gtk/parameters.ui.h:40
msgid "Ring sound:"
msgstr "鈴聲音效:"
#: ../gtk/parameters.ui.h:39
#: ../gtk/parameters.ui.h:41
msgid "ALSA special device (optional):"
msgstr "ALSA 特殊裝置 (選擇性)"
#: ../gtk/parameters.ui.h:40
#: ../gtk/parameters.ui.h:42
msgid "Capture device:"
msgstr "捕捉裝置:"
#: ../gtk/parameters.ui.h:41
#: ../gtk/parameters.ui.h:43
msgid "Ring device:"
msgstr "響鈴裝置:"
#: ../gtk/parameters.ui.h:42
#: ../gtk/parameters.ui.h:44
msgid "Playback device:"
msgstr "播放裝置"
#: ../gtk/parameters.ui.h:43
#: ../gtk/parameters.ui.h:45
msgid "Enable echo cancellation"
msgstr "啟用回音消除"
#: ../gtk/parameters.ui.h:44
#: ../gtk/parameters.ui.h:46
msgid "<b>Audio</b>"
msgstr "<b>音效</b>"
#: ../gtk/parameters.ui.h:45
#: ../gtk/parameters.ui.h:47
msgid "Video input device:"
msgstr "視訊輸入裝置:"
#: ../gtk/parameters.ui.h:46
#: ../gtk/parameters.ui.h:48
msgid "Prefered video resolution:"
msgstr "偏好的視訊解析度:"
#: ../gtk/parameters.ui.h:47
#: ../gtk/parameters.ui.h:49
msgid "Video output method:"
msgstr ""
#: ../gtk/parameters.ui.h:48
#: ../gtk/parameters.ui.h:50
msgid "Show camera preview"
msgstr ""
#: ../gtk/parameters.ui.h:51
msgid "<b>Video</b>"
msgstr "<b>視訊</b>"
#: ../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 "<b>Default identity</b>"
msgstr "<b>預設身分識別</b>"
#: ../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 "<b>Proxy accounts</b>"
msgstr "<b>代理伺服器帳號</b>"
#: ../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 "<b>Privacy</b>"
msgstr "<b>隱私</b>"
#: ../gtk/parameters.ui.h:62
#: ../gtk/parameters.ui.h:65
msgid "Manage SIP Accounts"
msgstr "管理 SIP 帳號"
#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
msgid "Enable"
msgstr "啟用"
#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
msgid "Disable"
msgstr "停用"
#: ../gtk/parameters.ui.h:65
#: ../gtk/parameters.ui.h:68
msgid "<b>Codecs</b>"
msgstr "<b>編碼解碼器</b>"
#: ../gtk/parameters.ui.h:66
#: ../gtk/parameters.ui.h:69
msgid "0 stands for \"unlimited\""
msgstr "0 表示「不限制」"
#: ../gtk/parameters.ui.h:67
#: ../gtk/parameters.ui.h:70
msgid "Upload speed limit in Kbit/sec:"
msgstr "上傳速度限制於 Kbit/sec:"
#: ../gtk/parameters.ui.h:68
#: ../gtk/parameters.ui.h:71
msgid "Download speed limit in Kbit/sec:"
msgstr "下載速度限制於 Kbit/sec:"
#: ../gtk/parameters.ui.h:69
#: ../gtk/parameters.ui.h:72
msgid "Enable adaptive rate control"
msgstr ""
#: ../gtk/parameters.ui.h:70
#: ../gtk/parameters.ui.h:73
msgid ""
"<i>Adaptive rate control is a technique to dynamically guess the available "
"bandwidth during a call.</i>"
msgstr ""
#: ../gtk/parameters.ui.h:71
#: ../gtk/parameters.ui.h:74
msgid "<b>Bandwidth control</b>"
msgstr "<b>頻寬控制</b>"
#: ../gtk/parameters.ui.h:72
#: ../gtk/parameters.ui.h:75
msgid "Codecs"
msgstr "編碼解碼器"
#: ../gtk/parameters.ui.h:73
#: ../gtk/parameters.ui.h:76
msgid "<b>Language</b>"
msgstr "<b>語言</b>"
#: ../gtk/parameters.ui.h:74
#: ../gtk/parameters.ui.h:77
msgid "Show advanced settings"
msgstr "顯示進階設定值"
#: ../gtk/parameters.ui.h:75
#: ../gtk/parameters.ui.h:78
msgid "<b>Level</b>"
msgstr "<b>級數</b>"
#: ../gtk/parameters.ui.h:76
#: ../gtk/parameters.ui.h:79
msgid "User interface"
msgstr "使用者介面"
#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
msgid "Server address:"
msgstr ""
#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
msgid "Authentication method:"
msgstr ""
#: ../gtk/parameters.ui.h:80
#: ../gtk/parameters.ui.h:83
msgid "<b>LDAP Account setup</b>"
msgstr ""
#: ../gtk/parameters.ui.h:81
#: ../gtk/parameters.ui.h:84
msgid "LDAP"
msgstr ""
#: ../gtk/parameters.ui.h:82
#: ../gtk/parameters.ui.h:85
msgid "Done"
msgstr "完成"
@ -1656,56 +1692,56 @@ msgstr ""
msgid "Ready"
msgstr "準備就緒"
#: ../coreapi/linphonecore.c:2473
#: ../coreapi/linphonecore.c:2489
msgid "Configuring"
msgstr ""
#: ../coreapi/linphonecore.c:2638
#: ../coreapi/linphonecore.c:2654
msgid "Looking for telephone number destination..."
msgstr "尋找電話號碼目的端..."
#: ../coreapi/linphonecore.c:2640
#: ../coreapi/linphonecore.c:2656
msgid "Could not resolve this number."
msgstr "無法解析這個號碼。"
#. must be known at that time
#: ../coreapi/linphonecore.c:2926
#: ../coreapi/linphonecore.c:2942
msgid "Contacting"
msgstr "正在連絡"
#: ../coreapi/linphonecore.c:2931
#: ../coreapi/linphonecore.c:2947
msgid "Could not call"
msgstr "無法通話"
#: ../coreapi/linphonecore.c:3081
#: ../coreapi/linphonecore.c:3097
msgid "Sorry, we have reached the maximum number of simultaneous calls"
msgstr "抱歉,我們已達瀏同步通話的最大數目"
#: ../coreapi/linphonecore.c:3240
#: ../coreapi/linphonecore.c:3256
msgid "is contacting you"
msgstr "正在連絡您"
#: ../coreapi/linphonecore.c:3241
#: ../coreapi/linphonecore.c:3257
msgid " and asked autoanswer."
msgstr "並要求自動接聽。"
#: ../coreapi/linphonecore.c:3359
#: ../coreapi/linphonecore.c:3375
msgid "Modifying call parameters..."
msgstr "修改通話參數..."
#: ../coreapi/linphonecore.c:3707
#: ../coreapi/linphonecore.c:3723
msgid "Connected."
msgstr "已連線。"
#: ../coreapi/linphonecore.c:3732
#: ../coreapi/linphonecore.c:3748
msgid "Call aborted"
msgstr "通話已放棄"
#: ../coreapi/linphonecore.c:3922
#: ../coreapi/linphonecore.c:3938
msgid "Could not pause the call"
msgstr "無法暫停通話"
#: ../coreapi/linphonecore.c:3926
#: ../coreapi/linphonecore.c:3941
msgid "Pausing the current call..."
msgstr "暫停目前的通話..."
@ -1769,14 +1805,14 @@ msgstr ""
msgid "Unknown status"
msgstr ""
#: ../coreapi/proxy.c:319
#: ../coreapi/proxy.c:327
msgid ""
"The sip proxy address you entered is invalid, it must start with \"sip:\" "
"followed by a hostname."
msgstr ""
"您輸入的 sip 代理位址是無效的它必須要以「sip:」開頭,後面接主機名稱。"
#: ../coreapi/proxy.c:325
#: ../coreapi/proxy.c:333
msgid ""
"The sip identity you entered is invalid.\n"
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
@ -1784,7 +1820,7 @@ msgstr ""
"您輸入的 sip 身分是無效的。\n"
"它應該看起來像 sip:使用者名稱@代理網域,像是 sip:alice@example.net"
#: ../coreapi/proxy.c:1377
#: ../coreapi/proxy.c:1391
#, c-format
msgid "Could not login as %s"
msgstr "無法以 %s 登入"
@ -1824,7 +1860,7 @@ msgstr "通話由 %s 接聽。"
msgid "Incompatible, check codecs or security settings..."
msgstr ""
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826
#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:829
msgid "Incompatible media parameters."
msgstr ""
@ -1867,43 +1903,43 @@ msgstr "通話被拒接。"
msgid "Request timeout."
msgstr ""
#: ../coreapi/callbacks.c:780
#: ../coreapi/callbacks.c:783
msgid "Redirected"
msgstr "已重新導向"
#: ../coreapi/callbacks.c:835
#: ../coreapi/callbacks.c:838
msgid "Call failed."
msgstr "通話失敗。"
#: ../coreapi/callbacks.c:913
#: ../coreapi/callbacks.c:916
#, c-format
msgid "Registration on %s successful."
msgstr "在 %s 註冊成功。"
#: ../coreapi/callbacks.c:914
#: ../coreapi/callbacks.c:917
#, c-format
msgid "Unregistration on %s done."
msgstr "在 %s 取消註冊完成。"
#: ../coreapi/callbacks.c:932
#: ../coreapi/callbacks.c:935
msgid "no response timeout"
msgstr "沒有回應逾時"
#: ../coreapi/callbacks.c:935
#: ../coreapi/callbacks.c:938
#, c-format
msgid "Registration on %s failed: %s"
msgstr "在 %s 註冊失敗:%s"
#: ../coreapi/callbacks.c:942
#: ../coreapi/callbacks.c:945
msgid "Service unavailable, retrying"
msgstr ""
#: ../coreapi/linphonecall.c:174
#: ../coreapi/linphonecall.c:175
#, c-format
msgid "Authentication token is %s"
msgstr ""
#: ../coreapi/linphonecall.c:3020
#: ../coreapi/linphonecall.c:3041
#, c-format
msgid "You have missed %i call."
msgid_plural "You have missed %i calls."
@ -1921,6 +1957,10 @@ msgstr ""
msgid "missed"
msgstr ""
#: ../coreapi/call_log.c:218
msgid "unknown"
msgstr ""
#: ../coreapi/call_log.c:220
#, c-format
msgid ""

View file

@ -30,7 +30,10 @@ if(APPLE)
string(REGEX REPLACE "OPENSSLDIR: \"(.*)\"" "\\1" HTTPS_CA_DIR "${OPENSSL_VERSION}")
endif()
execute_process(COMMAND ${CMAKE_COMMAND} -DHTTPS_CA_DIR=${HTTPS_CA_DIR} -DWORK_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/rootca.cmake)
set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/rootca.pem PROPERTIES GENERATED TRUE)
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/rootca.pem
COMMAND ${CMAKE_COMMAND} -DHTTPS_CA_DIR=${HTTPS_CA_DIR} -DWORK_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/rootca.cmake)
add_custom_target(rootca ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/rootca.pem)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rootca.pem
DESTINATION ${PACKAGE_DATA_DIR}/linphone

View file

@ -1,5 +1,6 @@
[Desktop Entry]
Name=Audio assistant
GenericName=Audio assistant
Name[ru]=Помощник аудио
Comment=Linphone audio assistant
Comment[fr]=Assistant audio de Linphone.
@ -8,4 +9,4 @@ Type=Application
Exec=linphone --run-audio-assistant
Icon=@prefix@/share/pixmaps/linphone/linphone.png
Terminal=false
Categories=Network;Telephony;
Categories=Network;Telephony;

View file

@ -1,47 +1,26 @@
[Desktop Entry]
Name=Linphone
GenericName=Web-phone
Comment=Linphone is a web-phone
Comment[fr]=Linphone est un web-phone.
Comment[de]=Linphone ist ein web-phone.
Comment[af]=Linphone is 'n webtelefoon
Comment[sq]=Linphone është një telefon interneti
Comment[ast]=Linphone ye un teléfonu web
Comment[bn]=Linphone ি
Comment[bs]=Linphone je mrežni telefon
Comment[pt_BR]=Linphone é um telefone web
Comment[bg]=Linphone е уеб телефон
Comment[ca@valencia]=El Linphone és un telèfon web
Comment[ca]=El Linphone és un telèfon web
Comment[zh_HK]=Linphone (web-phone)
Comment[zh_TW]=Linphone (web-phone)
Comment[zh_CN]=Linphone
Comment[crh]=Linphone bir web-telefonudur
Comment[nl]=Linphone is een webtelefoon
Comment[da]=Linphone er en nettelefon
Comment[cs]=Linphone webový telefon
Comment[fi]=Linphone on verkkopuhelin
Comment[gl]=Linphone é un teléfono-web
Comment[el]=Το Linphone είναι ένα διαδικτυακό τηλέφωνο
Comment[hu]=A Linphone egy webes telefon
Comment[is]=Linphone er vefsími
Comment[it]=Linphone è un telefono web
Comment[ja]=Linphone
Comment[ky]=Linphone - бул веб - телефон
Comment[ms]=Linphone adalah telefon-sesawang
Comment[oc]=Linphone es una aisina de telefonia IP
Comment[pl]=Rozbudowany telefon internetowy z funkcją wideorozmowy
Comment[nb]=Lintelefon er en nett-telefon
Comment[pt]=Linphone é um telefone da internet
Comment[ro]=Linphone este un telefon web
Comment[ru]=Linphone это веб-телефон
Comment[sl]=Linphone je spletni telefon
Comment[sv]=Webbtelefon
Comment[es]=Linphone es un teléfono web
Comment[vi]=Linphone là mt đin thoi web
Comment[uk]=Інтернет-телефон
Comment[tr]=Linphone bir web-telefonudur
Type=Application
Exec=linphone
Icon=@prefix@/share/pixmaps/linphone/linphone.png
Terminal=false
Categories=Network;Telephony;
# Translations
Name[de]=Linphone
Name[he]=Linphone
Name[ar]=لِنْفُونْ
Name[hu]=Linphone
Name[ru]=Linphone
Name[nb_NO]=Linphone
Name[it]=Linphone
Name[ja]=Linphone
Name[cs]=Linphone
Name[sr]=Линфон
Name[sv]=Linphone
Name[zh_CN]=Linphone
Name[fr]=Linphone
Name[zh_TW]=Linphone

View file

@ -26,7 +26,8 @@ liblinphonetester_la_SOURCES = tester.c \
transport_tester.c \
player_tester.c \
dtmf_tester.c \
accountmanager.c
accountmanager.c \
offeranswer_tester.c
liblinphonetester_la_LDFLAGS= -no-undefined
liblinphonetester_la_LIBADD= ../coreapi/liblinphone.la $(CUNIT_LIBS)

View file

@ -77,6 +77,7 @@ void account_manager_destroy(void){
ms_free(the_am);
}
the_am=NULL;
ms_message("Test account manager destroyed.");
}
Account *account_manager_get_account(AccountManager *m, const LinphoneAddress *identity){
@ -118,10 +119,15 @@ void account_create_on_server(Account *account, const LinphoneProxyConfig *refcf
LinphoneAuthInfo *ai;
char *tmp;
LinphoneAddress *server_addr;
LCSipTransports tr;
vtable.registration_state_changed=account_created_on_server_cb;
vtable.auth_info_requested=account_created_auth_requested_cb;
lc=configure_lc_from(&vtable,NULL,NULL,account);
lc=configure_lc_from(&vtable,liblinphone_tester_file_prefix,NULL,account);
tr.udp_port=LC_SIP_TRANSPORT_RANDOM;
tr.tcp_port=LC_SIP_TRANSPORT_RANDOM;
tr.tls_port=LC_SIP_TRANSPORT_RANDOM;
linphone_core_set_sip_transports(lc,&tr);
cfg=linphone_core_create_proxy_config(lc);
linphone_address_set_password(tmp_identity,account->password);
@ -133,6 +139,7 @@ void account_create_on_server(Account *account, const LinphoneProxyConfig *refcf
server_addr=linphone_address_new(linphone_proxy_config_get_server_addr(refcfg));
linphone_address_set_transport(server_addr,LinphoneTransportTcp); /*use tcp for account creation*/
linphone_address_set_port(server_addr,0);
tmp=linphone_address_as_string(server_addr);
linphone_proxy_config_set_server_addr(cfg,tmp);
ms_free(tmp);
@ -144,7 +151,6 @@ void account_create_on_server(Account *account, const LinphoneProxyConfig *refcf
if (wait_for_until(lc,NULL,&account->auth_requested,1,10000)==FALSE){
ms_fatal("Account for %s could not be created on server.", linphone_proxy_config_get_identity(refcfg));
}
linphone_proxy_config_stop_refreshing(cfg); /*so that op is destroyed; we need to remove the X-create-account*/
linphone_proxy_config_edit(cfg);
tmp=linphone_address_as_string(account->modified_identity);
linphone_proxy_config_set_identity(cfg,tmp); /*remove the X-Create-Account header*/
@ -206,10 +212,6 @@ void linphone_core_manager_check_accounts(LinphoneCoreManager *m){
for(it=linphone_core_get_proxy_config_list(m->lc);it!=NULL;it=it->next){
LinphoneProxyConfig *cfg=(LinphoneProxyConfig *)it->data;
LinphoneAddress *modified_identity=account_manager_check_account(am,cfg);
if (m->identity){
linphone_address_unref(m->identity);
}
m->identity=linphone_address_ref(modified_identity);
account_manager_check_account(am,cfg);
}
}

View file

@ -26,6 +26,7 @@
#include "private.h"
#include "liblinphone_tester.h"
#include "mediastreamer2/dsptools.h"
#include "belle-sip/sipstack.h"
#ifdef WIN32
#define unlink _unlink
@ -33,7 +34,6 @@
static void srtp_call(void);
static void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy);
static void disable_all_audio_codecs_except_one(LinphoneCore *lc, const char *mime, int rate);
static char *create_filepath(const char *dir, const char *filename, const char *ext);
// prototype definition for call_recording()
@ -188,7 +188,6 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr
stats initial_caller=caller_mgr->stat;
stats initial_callee=callee_mgr->stat;
bool_t result=FALSE;
char hellopath[256];
LinphoneCallParams *caller_params = caller_test_params->base;
LinphoneCallParams *callee_params = callee_test_params->base;
bool_t did_received_call;
@ -196,10 +195,6 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr
sal_default_enable_sdp_removal(caller_mgr->lc->sal, caller_test_params->sdp_removal);
sal_default_enable_sdp_removal(callee_mgr->lc->sal, callee_test_params->sdp_removal);
/*use playfile for callee to avoid locking on capture card*/
linphone_core_use_files (callee_mgr->lc,TRUE);
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(callee_mgr->lc,hellopath);
if (!caller_params){
CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address(caller_mgr->lc,callee_mgr->identity));
}else{
@ -326,12 +321,32 @@ static void simple_call(void) {
LinphoneCoreManager* pauline;
const LinphoneAddress *from;
LinphoneCall *pauline_call;
LinphoneProxyConfig* marie_cfg;
const char* marie_id = NULL;
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");
/* with the account manager, we might lose the identity */
marie_cfg = linphone_core_get_default_proxy_config(marie->lc);
marie_id = linphone_proxy_config_get_identity(marie_cfg);
{
LinphoneAddress* marie_addr = linphone_address_new(marie_id);
char* marie_tmp_id = NULL;
linphone_address_set_display_name(marie_addr, "Super Marie");
marie_tmp_id = linphone_address_as_string(marie_addr);
linphone_proxy_config_edit(marie_cfg);
linphone_proxy_config_set_identity(marie_cfg,marie_tmp_id);
linphone_proxy_config_done(marie_cfg);
ms_free(marie_tmp_id);
linphone_address_unref(marie_addr);
}
CU_ASSERT_TRUE(call(marie,pauline));
pauline_call=linphone_core_get_current_call(pauline->lc);
CU_ASSERT_PTR_NOT_NULL(pauline_call);
@ -361,6 +376,49 @@ static void simple_call(void) {
}
}
static void call_with_timeouted_bye(void) {
int begin;
int leaked_objects;
LinphoneCoreManager* marie;
LinphoneCoreManager* pauline;
belle_sip_timer_config_t timer_config;
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(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*/
timer_config.T2=4000;
timer_config.T3=0;
timer_config.T4=5000;
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));
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));
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);
if (leaked_objects>0){
belle_sip_object_dump_active_objects();
}
}
static void direct_call_over_ipv6(){
LinphoneCoreManager* marie;
LinphoneCoreManager* pauline;
@ -368,15 +426,9 @@ static void direct_call_over_ipv6(){
if (liblinphone_tester_ipv6_available()){
LCSipTransports pauline_transports;
LinphoneAddress* pauline_dest = linphone_address_new("sip:[::1];transport=tcp");
char hellopath[256];
marie = linphone_core_manager_new( "marie_rc");
pauline = linphone_core_manager_new( "pauline_tcp_rc");
/*use playfile for callee to avoid locking on capture card*/
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(pauline->lc,hellopath);
linphone_core_use_files (pauline->lc,TRUE);
linphone_core_enable_ipv6(marie->lc,TRUE);
linphone_core_enable_ipv6(pauline->lc,TRUE);
linphone_core_set_default_proxy_config(marie->lc,NULL);
@ -448,7 +500,6 @@ static void multiple_answers_call() {
/* Scenario is this: pauline calls marie, which is registered 2 times.
Both linphones answer at the same time, and only one should get the
call running, the other should be terminated */
char ringbackpath[256];
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc" );
LinphoneCoreManager* marie1 = linphone_core_manager_new( "marie_rc" );
LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc" );
@ -459,11 +510,6 @@ static void multiple_answers_call() {
lcs = ms_list_append(lcs,marie1->lc);
lcs = ms_list_append(lcs,marie2->lc);
linphone_core_use_files(pauline->lc, TRUE);
linphone_core_use_files(marie1->lc, TRUE);
linphone_core_use_files(marie2->lc, TRUE);
snprintf(ringbackpath,sizeof(ringbackpath), "%s/sounds/hello8000.wav" /*use hello because rinback is too short*/, liblinphone_tester_file_prefix);
CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 1, 2000));
@ -499,7 +545,6 @@ static void multiple_answers_call_with_media_relay() {
/* Scenario is this: pauline calls marie, which is registered 2 times.
* Both linphones answer at the same time, and only one should get the
* call running, the other should be terminated */
char ringbackpath[256];
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc" );
LinphoneCoreManager* marie1 = linphone_core_manager_new( "marie_rc" );
LinphoneCoreManager* marie2 = linphone_core_manager_new( "marie_rc" );
@ -510,16 +555,10 @@ static void multiple_answers_call_with_media_relay() {
lcs = ms_list_append(lcs,marie1->lc);
lcs = ms_list_append(lcs,marie2->lc);
linphone_core_use_files(pauline->lc, TRUE);
linphone_core_use_files(marie1->lc, TRUE);
linphone_core_use_files(marie2->lc, TRUE);
linphone_core_set_user_agent(pauline->lc, "Natted Linphone", NULL);
linphone_core_set_user_agent(marie1->lc, "Natted Linphone", NULL);
linphone_core_set_user_agent(marie2->lc, "Natted Linphone", NULL);
snprintf(ringbackpath,sizeof(ringbackpath), "%s/sounds/hello8000.wav" /*use hello because rinback is too short*/, liblinphone_tester_file_prefix);
CU_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 ) );
@ -687,7 +726,7 @@ static void cancelled_call(void) {
linphone_core_manager_destroy(pauline);
}
static void disable_all_audio_codecs_except_one(LinphoneCore *lc, const char *mime, int rate){
void disable_all_audio_codecs_except_one(LinphoneCore *lc, const char *mime, int rate){
const MSList *elem=linphone_core_get_audio_codecs(lc);
PayloadType *pt;
@ -714,40 +753,6 @@ static void disable_all_video_codecs_except_one(LinphoneCore *lc, const char *mi
}
#endif
static void call_failed_because_of_codecs(void) {
int begin,leaked_objects;
belle_sip_object_enable_leak_detector(TRUE);
begin=belle_sip_object_get_object_count();
{
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
LinphoneCall* out_call;
disable_all_audio_codecs_except_one(marie->lc,"pcmu",-1);
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));
/*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);
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);
if (leaked_objects>0){
belle_sip_object_dump_active_objects();
}
}
static void call_with_dns_time_out(void) {
LinphoneCoreManager* marie = linphone_core_manager_new2( "empty_rc", FALSE);
LCSipTransports transport = {9773,0,0,0};
@ -894,6 +899,26 @@ static void call_with_no_sdp(void) {
linphone_core_manager_destroy(pauline);
}
static void call_with_no_sdp_ack_without_sdp(void){
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
LinphoneCall *call;
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));
call=linphone_core_get_current_call(pauline->lc);
if (call){
sal_call_enable_sdp_removal(call->op, TRUE); /*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));
}
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee, LinphoneIceState state) {
LinphoneCall *c1,*c2;
@ -1249,6 +1274,32 @@ static void call_paused_resumed_from_callee(void) {
linphone_core_manager_destroy(pauline);
}
static void audio_call_with_ice_no_matching_audio_codecs(void) {
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc");
LinphoneCall *out_call;
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));
/* 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);
linphone_call_unref(out_call);
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
}
#ifdef VIDEO_ENABLED
static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) {
LinphoneVideoPolicy caller_policy;
@ -1495,6 +1546,7 @@ static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* ma
LinphoneCall* marie_call;
LinphoneCall* pauline_call;
LinphoneVideoPolicy marie_policy, pauline_policy;
linphone_core_enable_video_capture(marie->lc, TRUE);
linphone_core_enable_video_display(marie->lc, TRUE);
linphone_core_enable_video_capture(pauline->lc, TRUE);
@ -1615,26 +1667,50 @@ static void call_with_ice_video_added(void) {
linphone_core_manager_destroy(pauline);
}
static void video_call_with_ice_no_matching_audio_codecs(void) {
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;
LinphoneVideoPolicy vpol={0};
linphone_core_enable_video_capture(marie->lc, TRUE);
linphone_core_enable_video_display(marie->lc, TRUE);
linphone_core_enable_video_capture(pauline->lc, TRUE);
linphone_core_enable_video_display(pauline->lc, FALSE);
vpol.automatically_initiate=TRUE;
vpol.automatically_accept=TRUE;
linphone_core_set_video_policy(pauline->lc,&vpol);
linphone_core_set_video_policy(marie->lc,&vpol);
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));
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));
/* 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);
linphone_core_accept_early_media(pauline->lc,linphone_core_get_current_call(pauline->lc));
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));
/*audio stream shall not have been requested to start*/
CU_ASSERT_PTR_NULL(linphone_core_get_current_call(pauline->lc)->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);
linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc));
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));
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));
linphone_call_unref(out_call);
linphone_core_manager_destroy(marie);
@ -1799,7 +1875,6 @@ static void call_waiting_indication_with_param(bool_t enable_caller_privacy) {
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
LinphoneCoreManager* laure = linphone_core_manager_new( "laure_rc");
char hellopath[256];
MSList *iterator;
MSList* lcs;
LinphoneCall* pauline_called_by_marie;
@ -1817,11 +1892,6 @@ static void call_waiting_indication_with_param(bool_t enable_caller_privacy) {
CU_ASSERT_TRUE(call_with_caller_params(marie,pauline,marie_params));
pauline_called_by_marie=linphone_core_get_current_call(pauline->lc);
/*use playfile for callee to avoid locking on capture card*/
linphone_core_use_files (laure->lc,TRUE);
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(laure->lc,hellopath);
if (enable_caller_privacy)
linphone_call_params_set_privacy(laure_params,LinphonePrivacyId);
@ -1844,7 +1914,8 @@ static void call_waiting_indication_with_param(bool_t enable_caller_privacy) {
LinphoneCall *call=(LinphoneCall *)iterator->data;
if (call != pauline_called_by_marie) {
/*fine, this is the call waiting*/
linphone_core_accept_call(pauline->lc,pauline_called_by_laure=call);
pauline_called_by_laure=call;
linphone_core_accept_call(pauline->lc,pauline_called_by_laure);
}
}
@ -1910,15 +1981,13 @@ static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManag
CU_ASSERT_PTR_NOT_NULL_FATAL(marie_call_laure);
linphone_core_add_to_conference(marie->lc,marie_call_laure);
CU_ASSERT_TRUE(wait_for(marie->lc,laure->lc,&marie->stat.number_of_LinphoneCallUpdating,initial_marie_stat.number_of_LinphoneCallUpdating+1));
CU_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));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallStreamsRunning,initial_pauline_stat.number_of_LinphoneCallStreamsRunning+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));
@ -2041,18 +2110,24 @@ static void call_with_file_player(void) {
CU_ASSERT_TRUE(linphone_player_open(player,hellopath,on_eof,marie)==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));
/* 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,30000));
/*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));
#ifndef __arm__
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) {
remove(recordpath);
}
#else
remove(recordpath);
#endif
linphone_core_manager_destroy(marie);
linphone_core_manager_destroy(pauline);
ms_free(recordpath);
@ -2115,12 +2190,17 @@ static void call_with_mkv_file_player(void) {
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));
#ifndef __arm__
CU_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,NULL,NULL)==0);
CU_ASSERT_TRUE(similar>threshold);
CU_ASSERT_TRUE(similar<=1.0);
if(similar>threshold && similar<=1.0) {
remove(recordpath);
}
#else
/*inter-correlation process is too much CPU consuming ending in a 20 minutes test on arm...*/
remove(recordpath);
#endif
ms_free(recordpath);
end:
@ -2253,14 +2333,13 @@ static void early_media_call(void) {
}
static void early_media_call_with_ringing(void){
char hellopath[256];
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_rc");
MSList* lcs = NULL;
LinphoneCall* marie_call;
LinphoneCallLog *marie_call_log;
time_t connected_time=0;
time_t ended_time=0;
uint64_t connected_time=0;
uint64_t ended_time=0;
int dummy=0;
lcs = ms_list_append(lcs,marie->lc);
@ -2269,11 +2348,6 @@ static void early_media_call_with_ringing(void){
Marie calls Pauline, and after the call has rung, transitions to an early_media session
*/
/*use playfile for callee to avoid locking on capture card*/
linphone_core_use_files (pauline->lc,TRUE);
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(pauline->lc,hellopath);
marie_call = linphone_core_invite_address(marie->lc, pauline->identity);
marie_call_log = linphone_call_get_call_log(marie_call);
@ -2294,7 +2368,7 @@ static void early_media_call_with_ringing(void){
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));
connected_time=time(NULL);
connected_time=ms_get_cur_time_ms();
CU_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));
@ -2307,8 +2381,8 @@ static void early_media_call_with_ringing(void){
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));
ended_time=time(NULL);
CU_ASSERT_TRUE (labs (linphone_call_log_get_duration(marie_call_log) - (ended_time - connected_time)) <1 );
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 );
ms_list_free(lcs);
}
@ -2317,7 +2391,6 @@ static void early_media_call_with_ringing(void){
}
static void early_media_call_with_update_base(bool_t media_change){
char hellopath[256];
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_rc");
MSList* lcs = NULL;
@ -2334,11 +2407,6 @@ static void early_media_call_with_update_base(bool_t media_change){
Marie calls Pauline, and after the call has rung, transitions to an early_media session
*/
/*use playfile for callee to avoid locking on capture card*/
linphone_core_use_files (pauline->lc,TRUE);
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(pauline->lc,hellopath);
marie_call = linphone_core_invite_address(marie->lc, pauline->identity);
CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,1000));
@ -2556,9 +2624,6 @@ static void call_transfer_existing_call_outgoing_call(void) {
MSList* lcs=ms_list_append(NULL,marie->lc);
const MSList* calls;
linphone_core_use_files (pauline->lc,TRUE);
linphone_core_use_files (laure->lc,TRUE);
lcs=ms_list_append(lcs,pauline->lc);
lcs=ms_list_append(lcs,laure->lc);
@ -2585,8 +2650,8 @@ static void call_transfer_existing_call_outgoing_call(void) {
CU_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,2000));
CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallPaused,1,2000));
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));
/*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));
@ -2724,7 +2789,6 @@ static void call_established_with_rejected_incoming_reinvite(void) {
}
static void call_redirect(void){
char hellopath[256];
LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_rc");
LinphoneCoreManager* laure = linphone_core_manager_new("laure_rc");
@ -2739,13 +2803,6 @@ static void call_redirect(void){
Marie calls Pauline, which will redirect the call to Laure via a 302
*/
/*use playfile for callee to avoid locking on capture card*/
linphone_core_use_files (pauline->lc,TRUE);
linphone_core_use_files (laure->lc,TRUE);
snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix);
linphone_core_set_play_file(pauline->lc,hellopath);
linphone_core_set_play_file(laure->lc,hellopath);
marie_call = linphone_core_invite_address(marie->lc, pauline->identity);
CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,1000));
@ -2870,9 +2927,9 @@ static void call_rejected_without_403_because_wrong_credentials_no_auth_req_cb()
#ifdef VIDEO_ENABLED
/*this is call forking with early media managed at client side (not by flexisip server)*/
static void multiple_early_media(void) {
LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_tcp_rc");
LinphoneCoreManager* marie1 = linphone_core_manager_new("marie_early_rc");
LinphoneCoreManager* marie2 = linphone_core_manager_new("marie_early_rc");
LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_tcp_rc");
MSList *lcs=NULL;
LinphoneCallParams *params=linphone_core_create_default_call_parameters(pauline->lc);
LinphoneVideoPolicy pol;
@ -2881,9 +2938,6 @@ static void multiple_early_media(void) {
LinphoneCall *pauline_call;
LinphoneInfoMessage *info;
int dummy=0;
char ringbackpath[256];
snprintf(ringbackpath,sizeof(ringbackpath), "%s/sounds/hello8000.wav" /*use hello because rinback is too short*/, liblinphone_tester_file_prefix);
pol.automatically_accept=1;
pol.automatically_initiate=1;
@ -2891,18 +2945,11 @@ static void multiple_early_media(void) {
linphone_core_enable_video(marie1->lc,TRUE,TRUE);
linphone_core_set_video_policy(marie1->lc,&pol);
/*use playfile for marie1 to avoid locking on capture card*/
linphone_core_use_files(marie1->lc,TRUE);
linphone_core_set_play_file(marie1->lc,ringbackpath);
linphone_core_enable_video(marie2->lc,TRUE,TRUE);
linphone_core_set_video_policy(marie2->lc,&pol);
linphone_core_set_audio_port_range(marie2->lc,40200,40300);
linphone_core_set_video_port_range(marie2->lc,40400,40500);
/*use playfile for marie2 to avoid locking on capture card*/
linphone_core_use_files(marie2->lc,TRUE);
linphone_core_set_play_file(marie2->lc,ringbackpath);
lcs=ms_list_append(lcs,marie1->lc);
lcs=ms_list_append(lcs,marie2->lc);
@ -2923,7 +2970,7 @@ static void multiple_early_media(void) {
marie2_call=linphone_core_get_current_call(marie2->lc);
/*wait a bit that streams are established*/
wait_for_list(lcs,&dummy,1,6000);
wait_for_list(lcs,&dummy,1,3000);
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);
@ -2956,115 +3003,6 @@ static void multiple_early_media(void) {
}
#endif
static void profile_call(bool_t avpf1, bool_t srtp1, bool_t avpf2, bool_t srtp2, const char *expected_profile) {
LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc");
LinphoneCoreManager *pauline = linphone_core_manager_new("pauline_rc");
LinphoneProxyConfig *lpc;
const LinphoneCallParams *params;
if (avpf1) {
linphone_core_get_default_proxy(marie->lc, &lpc);
linphone_proxy_config_enable_avpf(lpc, TRUE);
linphone_proxy_config_set_avpf_rr_interval(lpc, 3);
}
if (avpf2) {
linphone_core_get_default_proxy(pauline->lc, &lpc);
linphone_proxy_config_enable_avpf(lpc, TRUE);
linphone_proxy_config_set_avpf_rr_interval(lpc, 3);
}
if (srtp1) {
if (linphone_core_media_encryption_supported(marie->lc, LinphoneMediaEncryptionSRTP)) {
linphone_core_set_media_encryption(marie->lc, LinphoneMediaEncryptionSRTP);
}
}
if (srtp2) {
if (linphone_core_media_encryption_supported(pauline->lc, LinphoneMediaEncryptionSRTP)) {
linphone_core_set_media_encryption(pauline->lc, LinphoneMediaEncryptionSRTP);
}
}
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));
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);
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);
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);
linphone_core_manager_destroy(pauline);
linphone_core_manager_destroy(marie);
}
static void avp_to_avp_call(void) {
profile_call(FALSE, FALSE, FALSE, FALSE, "RTP/AVP");
}
static void avp_to_avpf_call(void) {
profile_call(FALSE, FALSE, TRUE, FALSE, "RTP/AVP");
}
static void avp_to_savp_call(void) {
profile_call(FALSE, FALSE, FALSE, TRUE, "RTP/AVP");
}
static void avp_to_savpf_call(void) {
profile_call(FALSE, FALSE, TRUE, TRUE, "RTP/AVP");
}
static void avpf_to_avp_call(void) {
profile_call(TRUE, FALSE, FALSE, FALSE, "RTP/AVPF");
}
static void avpf_to_avpf_call(void) {
profile_call(TRUE, FALSE, TRUE, FALSE, "RTP/AVPF");
}
static void avpf_to_savp_call(void) {
profile_call(TRUE, FALSE, FALSE, TRUE, "RTP/AVPF");
}
static void avpf_to_savpf_call(void) {
profile_call(TRUE, FALSE, TRUE, TRUE, "RTP/AVPF");
}
static void savp_to_avp_call(void) {
profile_call(FALSE, TRUE, FALSE, FALSE, "RTP/SAVP");
}
static void savp_to_avpf_call(void) {
profile_call(FALSE, TRUE, TRUE, FALSE, "RTP/SAVP");
}
static void savp_to_savp_call(void) {
profile_call(FALSE, TRUE, FALSE, TRUE, "RTP/SAVP");
}
static void savp_to_savpf_call(void) {
profile_call(FALSE, TRUE, TRUE, TRUE, "RTP/SAVP");
}
static void savpf_to_avp_call(void) {
profile_call(TRUE, TRUE, FALSE, FALSE, "RTP/SAVPF");
}
static void savpf_to_avpf_call(void) {
profile_call(TRUE, TRUE, TRUE, FALSE, "RTP/SAVPF");
}
static void savpf_to_savp_call(void) {
profile_call(TRUE, TRUE, FALSE, TRUE, "RTP/SAVPF");
}
static void savpf_to_savpf_call(void) {
profile_call(TRUE, TRUE, TRUE, TRUE, "RTP/SAVPF");
}
static char *create_filepath(const char *dir, const char *filename, const char *ext) {
return ms_strdup_printf("%s/%s.%s",dir,filename,ext);
}
@ -3450,8 +3388,8 @@ 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 failed because of codecs", call_failed_because_of_codecs },
{ "Simple call", simple_call },
{ "Call with timeouted bye", call_with_timeouted_bye },
{ "Direct call over IPv6", direct_call_over_ipv6},
{ "Outbound call with multiple proxy possible", call_outbound_with_multiple_proxy },
{ "Audio call recording", audio_call_recording_test },
@ -3468,6 +3406,7 @@ test_t call_tests[] = {
{ "Early-media call with updated codec", early_media_call_with_codec_update},
{ "Call terminated by caller", call_terminated_by_caller },
{ "Call without SDP", call_with_no_sdp},
{ "Call without SDP and ACK without SDP", call_with_no_sdp_ack_without_sdp},
{ "Call paused resumed", call_paused_resumed },
{ "Call paused resumed with loss", call_paused_resumed_with_loss },
{ "Call paused resumed from callee", call_paused_resumed_from_callee },
@ -3477,6 +3416,7 @@ test_t call_tests[] = {
{ "SRTP call with declined srtp", call_with_declined_srtp },
{ "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 },
#ifdef VIDEO_ENABLED
{ "Simple video call",video_call},
{ "Simple video call using policy",video_call_using_policy},
@ -3492,9 +3432,9 @@ 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 },
{ "Video call with ICE no matching audio codecs", video_call_with_ice_no_matching_audio_codecs },
{ "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 },
#endif
{ "SRTP ice call", srtp_ice_call },
{ "ZRTP ice call", zrtp_ice_call },
@ -3524,22 +3464,6 @@ test_t call_tests[] = {
{ "Call established with rejected RE-INVITE in error", call_established_with_rejected_reinvite_with_error},
{ "Call redirected by callee", call_redirect},
{ "Call with specified codec bitrate", call_with_specified_codec_bitrate},
{ "AVP to AVP call", avp_to_avp_call },
{ "AVP to AVPF call", avp_to_avpf_call },
{ "AVP to SAVP call", avp_to_savp_call },
{ "AVP to SAVPF call", avp_to_savpf_call },
{ "AVPF to AVP call", avpf_to_avp_call },
{ "AVPF to AVPF call", avpf_to_avpf_call },
{ "AVPF to SAVP call", avpf_to_savp_call },
{ "AVPF to SAVPF call", avpf_to_savpf_call },
{ "SAVP to AVP call", savp_to_avp_call },
{ "SAVP to AVPF call", savp_to_avpf_call },
{ "SAVP to SAVP call", savp_to_savp_call },
{ "SAVP to SAVPF call", savp_to_savpf_call },
{ "SAVPF to AVP call", savpf_to_avp_call },
{ "SAVPF to AVPF call", savpf_to_avpf_call },
{ "SAVPF to SAVP call", savpf_to_savp_call },
{ "SAVPF to SAVPF call", savpf_to_savpf_call },
{ "Call with in-dialog UPDATE request", call_with_in_dialog_update },
{ "Call with in-dialog codec change", call_with_in_dialog_codec_change },
{ "Call with in-dialog codec change no sdp", call_with_in_dialog_codec_change_no_sdp },

View file

@ -18,7 +18,7 @@ auto-respawn=true
# List of white space separated host names pointing to this machine.
# This is to prevent loops while routing SIP messages.
# Default value: localhost
aliases=localhost sipopen.example.org sip.example.org auth.example.org auth1.example.org auth2.example.org client.example.org
aliases=localhost sipopen.example.org sip.example.org auth.example.org auth1.example.org auth2.example.org client.example.org sip2.linphone.org
# List of white space separated SIP uris where the proxy must listen.Wildcard
# (*) can be used to mean 'all local ip addresses'. If 'transport'

Some files were not shown because too many files have changed in this diff Show more