mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-05-07 05:53:06 +00:00
Merge remote-tracking branch 'linphone/master' into daemon
This commit is contained in:
commit
ff3bf34a86
83 changed files with 8187 additions and 5469 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -86,3 +86,4 @@ tester/linphone_log.txt
|
|||
po/linphone.pot
|
||||
.tx/linphone-gtk.audio-assistantdesktopin/
|
||||
tester/linphone_log.gz.txt
|
||||
tools/auto_answer
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ project(LINPHONE C CXX)
|
|||
|
||||
set(LINPHONE_MAJOR_VERSION "3")
|
||||
set(LINPHONE_MINOR_VERSION "8")
|
||||
set(LINPHONE_MICRO_VERSION "0")
|
||||
set(LINPHONE_MICRO_VERSION "1")
|
||||
set(LINPHONE_VERSION "${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}")
|
||||
set(LINPHONE_SO_VERSION "6")
|
||||
|
||||
|
|
@ -94,6 +94,7 @@ endif()
|
|||
find_package(BelleSIP REQUIRED)
|
||||
find_package(Mediastreamer2 REQUIRED)
|
||||
find_package(XML2 REQUIRED)
|
||||
find_package(Zlib)
|
||||
if(ENABLE_UNIT_TESTS)
|
||||
find_package(CUnit)
|
||||
if(CUNIT_FOUND)
|
||||
|
|
@ -148,6 +149,10 @@ include_directories(
|
|||
${MEDIASTREAMER2_INCLUDE_DIRS}
|
||||
${XML2_INCLUDE_DIRS}
|
||||
)
|
||||
if(ZLIB_FOUND)
|
||||
include_directories(${ZLIB_INCLUDE_DIRS})
|
||||
set(HAVE_ZLIB 1)
|
||||
endif()
|
||||
if(SQLITE3_FOUND)
|
||||
include_directories(${SQLITE3_INCLUDE_DIRS})
|
||||
add_definitions("-DMSG_STORAGE_ENABLED")
|
||||
|
|
|
|||
14
Makefile.am
14
Makefile.am
|
|
@ -167,10 +167,10 @@ filelist: zip
|
|||
|
||||
pull-transifex:
|
||||
tx pull -af
|
||||
$(MAKE) -C po update-po
|
||||
|
||||
push-transifex:
|
||||
tx push -s -t -f --no-interactive
|
||||
$(MAKE) -C po update-po
|
||||
tx push -s -f --no-interactive
|
||||
|
||||
|
||||
### WINDOWS
|
||||
|
|
@ -214,7 +214,7 @@ BUNDLEDIR=$(BUNDLEPREFIX)$(MACAPPNAME)
|
|||
#a path prefix where additional libs can be cherry-picked by the bundler.
|
||||
LINPHONE_ADDITIONAL_DEPENDENCIES_PREFIX=/usr/local
|
||||
|
||||
bundle:
|
||||
Linphone.app:
|
||||
rm -rf $(INSTALLDIR)
|
||||
$(MKDIR_P) $(INSTALLDIR)
|
||||
make install DESTDIR=$(INSTALLDIR)
|
||||
|
|
@ -228,9 +228,17 @@ bundle:
|
|||
> $(BUNDLEDIR)/Contents/Resources/etc/pango/pangorc
|
||||
cp -f $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules.orig
|
||||
sed -e 's:@executable_path.*/::g' $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules.orig > $(BUNDLEDIR)/Contents/Resources/etc/pango/pango.modules
|
||||
patch -R ${BUNDLEDIR}/Contents/Resources/share/themes/Quartz/gtk-2.0/gtkrc ${srcdir}/build/macos/quartz-theme-gtkrc.patch
|
||||
|
||||
bundle: Linphone.app
|
||||
cd $(BUNDLEDIR)/.. && rm -f $(MACAPPZIP) && zip -r $(MACAPPZIP) $(MACAPPNAME) && cd -
|
||||
cd $(BUNDLEDIR)/.. && rm -f $(MAXAPPDMG) && hdiutil create $(MACAPPDMG) -srcfolder $(MACAPPNAME) -ov && cd -
|
||||
|
||||
signed-bundle: Linphone.app
|
||||
codesign --deep -s $(BUNDLE_SIGNING_ID) $(BUNDLEDIR)
|
||||
cd $(BUNDLEDIR)/.. && rm -f $(MAXAPPDMG) && hdiutil create $(MACAPPDMG) -srcfolder $(MACAPPNAME) -ov && cd -
|
||||
|
||||
|
||||
###
|
||||
### CLEAN
|
||||
|
||||
|
|
|
|||
6
NEWS
6
NEWS
|
|
@ -1,3 +1,9 @@
|
|||
linphone-3.8.1 -- March 31th, 2015
|
||||
Application level improvements:
|
||||
* Auto-answer ability
|
||||
* Improvement of UI appearance on Mac OSX
|
||||
* Bug fixes
|
||||
|
||||
linphone-3.8.0 -- March 11th, 2015
|
||||
Application level improvements:
|
||||
* The video window has now controls in order to switch fullscreen mode and terminate call.
|
||||
|
|
|
|||
|
|
@ -13,29 +13,26 @@
|
|||
|
||||
##### Multiple MacOS version support
|
||||
|
||||
In order to enable generation of bundle for multiple MacOS version and 32 bit processors, it is recommended to:
|
||||
In order to enable generation of bundle for older MacOS version, it is recommended to:
|
||||
|
||||
1. Edit `/opt/local/etc/macports/macports.conf` to add the following line:
|
||||
Edit `/opt/local/etc/macports/macports.conf` to add the following line:
|
||||
|
||||
> macosx_deployment_target 10.6
|
||||
|
||||
2. Edit `/opt/local/etc/macports/variants.conf` to add the following line:
|
||||
|
||||
> +universal
|
||||
> macosx_deployment_target 10.7
|
||||
> buildfromsource always
|
||||
|
||||
|
||||
##### Linphone library (liblinphone)
|
||||
|
||||
sudo port install automake autoconf libtool pkgconfig intltool wget cunit \
|
||||
antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp \
|
||||
antlr3 speex libvpx readline sqlite3 openldap libupnp \
|
||||
ffmpeg-devel -gpl2
|
||||
|
||||
##### 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
|
||||
sudo port install gtk2 +quartz +no_x11 libsoup
|
||||
sudo port install gtk-osx-application +no_python
|
||||
sudo port install hicolor-icon-theme
|
||||
|
||||
#### Using HomeBrew
|
||||
|
|
@ -62,8 +59,8 @@ The next pieces need to be compiled manually.
|
|||
|
||||
* To ensure compatibility with multiple MacOS versions it is recommended to do:
|
||||
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.6
|
||||
export LDFLAGS="-Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress"
|
||||
export MACOSX_DEPLOYMENT_TARGET=10.7
|
||||
export LDFLAGS="-Wl,-headerpad_max_install_names"
|
||||
|
||||
* (MacPorts only) Install libantlr3c (library used by belle-sip for parsing)
|
||||
|
||||
|
|
@ -132,10 +129,15 @@ The libvpx build isn't able to produce dual architecture files. To workaround th
|
|||
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
|
||||
cd gtk-mac-bundler
|
||||
git checkout 6e2ed855aaeae43c29436c342ae83568573b5636
|
||||
make install
|
||||
export PATH=$PATH:~/.local/bin
|
||||
# make this dummy charset.alias file for the bundler to be happy:
|
||||
sudo touch /opt/local/lib/charset.alias
|
||||
# set writing right for owner on the libssl and libcrypto libraries in order gtk-mac-bundler
|
||||
# be able to rewrite their rpath
|
||||
sudo chmod u+w /opt/local/lib/libssl.1.0.0.dylib /opt/local/lib/libcrypto.1.0.0.dylib
|
||||
|
||||
The bundler file in `build/MacOS/linphone.bundle` expects some plugins to be installed in `/opt/local/lib/mediastreamer/plugins`.
|
||||
If you don't need plugins, remove or comment out this line from the bundler file:
|
||||
|
|
@ -160,28 +162,15 @@ Then run, inside Linphone source tree configure as told before but with `--enabl
|
|||
The resulting bundle is located in Linphone build directory, together with a zipped version.
|
||||
|
||||
* For a better appearance, you can install `gtk-quartz-engine` (a GTK theme) that makes GTK application more similar to other Mac applications (but not perfect).
|
||||
|
||||
sudo port install gnome-common
|
||||
git clone https://github.com/jralls/gtk-quartz-engine.git
|
||||
cd gtk-quartz-engine
|
||||
autoreconf -i
|
||||
./autogen.sh
|
||||
./configure --prefix=/opt/local CFLAGS="$CFLAGS -Wno-error" && make
|
||||
sudo make install
|
||||
|
||||
Generate a new bundle to have it included.
|
||||
|
||||
### libiconv hack
|
||||
|
||||
The `Makefile.am` rules used to generate the bundle fetch a `libiconv.2.dylib` from a Linphone download page.
|
||||
This library adds some additional symbols so that dependencies requiring the `iconv` from `/usr/lib` and the ones requiring from the bundle are both satisfied.
|
||||
In case this library needs to generated, here are the commands:
|
||||
|
||||
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
|
||||
cd libiconv-1.14
|
||||
patch -p1 < ../linphone/build/MacOS/libiconv-MacOS.patch
|
||||
./configure --prefix=/opt/local --disable-static 'CFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' 'LDFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" && make
|
||||
make install DESTDIR=/tmp
|
||||
|
||||
The resulted library can be found in `/tmp/opt/local/lib`.
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -3,5 +3,24 @@ export LINPHONE_WORKDIR="$bundle_res"
|
|||
export GIO_EXTRA_MODULES="$bundle_lib/gio/modules"
|
||||
export PANGO_LIBDIR="$bundle_lib"
|
||||
export PANGO_SYSCONFDIR="$bundle_etc"
|
||||
|
||||
#this is very important not to force a shared library path so that native frameworks can find their dependencies by themselves,
|
||||
#and not be forced to use the few libraries we have in the bundle that have the same name as native libs (ex: libiconv)
|
||||
export DYLD_LIBRARY_PATH=
|
||||
|
||||
#the fucking script of the gtk-mac-bundler resets LANG due to obscure bugs. Set it back.
|
||||
LANG=`defaults read .GlobalPreferences AppleLocale`
|
||||
|
||||
case "$LANG" in
|
||||
*.UTF-8)
|
||||
;;
|
||||
*)
|
||||
if test -d /usr/share/locale/${LANG}.UTF-8 ; then
|
||||
LANG=${LANG}.UTF-8
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
export LANG
|
||||
|
||||
echo "LANG is $LANG"
|
||||
|
|
@ -104,13 +104,13 @@
|
|||
want to copy in to the bundle. The "dest" attribute is
|
||||
optional, as usual. Bundler will find all translations of that
|
||||
library/program under the indicated directory and copy them.-->
|
||||
<translations name="linphone">
|
||||
<data name="linphone">
|
||||
${prefix:linphone}/share/locale
|
||||
</data>
|
||||
<translations name="gdk-pixbuf">
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
<translations name="gdk-pixbuf">
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
<translations name="glib20">
|
||||
<translations name="glib20">
|
||||
${prefix}/share/locale
|
||||
</translations>
|
||||
<translations name="gtk20">
|
||||
|
|
|
|||
4
build/macos/quartz-theme-gtkrc.patch
Normal file
4
build/macos/quartz-theme-gtkrc.patch
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
85c85
|
||||
< buttontype = "textured"
|
||||
---
|
||||
> buttontype = "aqua"
|
||||
|
|
@ -122,6 +122,7 @@
|
|||
<ClCompile Include="..\..\coreapi\event.c" />
|
||||
<ClCompile Include="..\..\coreapi\friend.c" />
|
||||
<ClCompile Include="..\..\coreapi\info.c" />
|
||||
<ClCompile Include="..\..\coreapi\lime.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphonecall.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphonecore.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphone_tunnel.cc" />
|
||||
|
|
@ -141,6 +142,7 @@
|
|||
<ClCompile Include="..\..\coreapi\siplogin.c" />
|
||||
<ClCompile Include="..\..\coreapi\sipsetup.c" />
|
||||
<ClCompile Include="..\..\coreapi\TunnelManager.cc" />
|
||||
<ClCompile Include="..\..\coreapi\vtables.c" />
|
||||
<ClCompile Include="..\..\coreapi\xml.c" />
|
||||
<ClCompile Include="..\..\coreapi\xml2lpc.c" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@
|
|||
<ClCompile Include="..\..\coreapi\event.c" />
|
||||
<ClCompile Include="..\..\coreapi\friend.c" />
|
||||
<ClCompile Include="..\..\coreapi\info.c" />
|
||||
<ClCompile Include="..\..\coreapi\lime.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphonecall.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphonecore.c" />
|
||||
<ClCompile Include="..\..\coreapi\linphone_tunnel_config.c" />
|
||||
|
|
@ -143,6 +144,7 @@
|
|||
<ClCompile Include="..\..\coreapi\sal.c" />
|
||||
<ClCompile Include="..\..\coreapi\siplogin.c" />
|
||||
<ClCompile Include="..\..\coreapi\sipsetup.c" />
|
||||
<ClCompile Include="..\..\coreapi\vtables.c" />
|
||||
<ClCompile Include="..\..\coreapi\xml.c" />
|
||||
<ClCompile Include="..\..\coreapi\xml2lpc.c" />
|
||||
</ItemGroup>
|
||||
|
|
|
|||
55
cmake/FindZlib.cmake
Normal file
55
cmake/FindZlib.cmake
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
############################################################################
|
||||
# FindZlib.txt
|
||||
# Copyright (C) 2015 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 zlib include file and library
|
||||
#
|
||||
# ZLIB_FOUND - system has zlib
|
||||
# ZLIB_INCLUDE_DIRS - the zlib include directory
|
||||
# ZLIB_LIBRARIES - The libraries needed to use zlib
|
||||
|
||||
set(_ZLIB_ROOT_PATHS
|
||||
${CMAKE_INSTALL_PREFIX}
|
||||
)
|
||||
|
||||
find_path(ZLIB_INCLUDE_DIRS
|
||||
NAMES zlib.h
|
||||
HINTS _ZLIB_ROOT_PATHS
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
if(ZLIB_INCLUDE_DIRS)
|
||||
set(HAVE_ZLIB_H 1)
|
||||
endif()
|
||||
|
||||
find_library(ZLIB_LIBRARIES
|
||||
NAMES z zlib zlibd
|
||||
HINTS ${_ZLIB_ROOT_PATHS}
|
||||
PATH_SUFFIXES bin lib
|
||||
)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Zlib
|
||||
DEFAULT_MSG
|
||||
ZLIB_INCLUDE_DIRS ZLIB_LIBRARIES HAVE_ZLIB_H
|
||||
)
|
||||
|
||||
mark_as_advanced(ZLIB_INCLUDE_DIRS ZLIB_LIBRARIES HAVE_ZLIB_H)
|
||||
|
|
@ -39,5 +39,6 @@
|
|||
|
||||
#cmakedefine BUILD_WIZARD
|
||||
#cmakedefine HAVE_NOTIFY4
|
||||
#cmakedefine HAVE_ZLIB 1
|
||||
#cmakedefine HAVE_CU_GET_SUITE 1
|
||||
#cmakedefine HAVE_CU_CURSES 1
|
||||
#cmakedefine HAVE_CU_CURSES 1
|
||||
|
|
|
|||
26
configure.ac
26
configure.ac
|
|
@ -1,6 +1,6 @@
|
|||
dnl Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_INIT([linphone],[3.8.0-linphone-daemon],[linphone-developers@nongnu.org])
|
||||
AC_INIT([linphone],[3.8.1],[linphone-developers@nongnu.org])
|
||||
AC_CANONICAL_SYSTEM
|
||||
AC_CONFIG_SRCDIR([coreapi/linphonecore.c])
|
||||
|
||||
|
|
@ -337,7 +337,14 @@ AC_ARG_ENABLE(gtk_ui,
|
|||
if test "$gtk_ui" = "true" ; then
|
||||
PKG_CHECK_MODULES(LIBGTK, gtk+-2.0 >= 2.18.0 gthread-2.0)
|
||||
if test "$enable_x11" = "false" ; then
|
||||
PKG_CHECK_MODULES(LIBGTKMAC,[gtk-mac-integration >= 2.0.1])
|
||||
PKG_CHECK_MODULES(LIBGTKMAC,[gtk-mac-integration >= 2.0.1], [found_gtkmac=true], [found_gtkmac=false])
|
||||
if test "$found_gtkmac" != "true" ; then
|
||||
dnl for newest macports, the name changed.
|
||||
PKG_CHECK_MODULES(LIBGTKMAC,[gtk-mac-integration-gtk2 >= 2.0.1], [found_gtkmac=true], [found_gtkmac=false])
|
||||
fi
|
||||
if test "$found_gtkmac" != "true" ; then
|
||||
AC_MSG_ERROR([gtk-mac-integration not found. Please install gtk-osx-application package.])
|
||||
fi
|
||||
AC_DEFINE([HAVE_GTK_OSX],[1],[Defined when gtk osx is used])
|
||||
fi
|
||||
else
|
||||
|
|
@ -1008,7 +1015,20 @@ dnl ##################################################
|
|||
dnl # Check for doxygen
|
||||
dnl ##################################################
|
||||
|
||||
AC_CHECK_PROG(DOXYGEN,doxygen,doxygen,false)
|
||||
AC_ARG_ENABLE(doxygen,
|
||||
[AS_HELP_STRING([--disable-documentation], [Disable documentation generation using doxygen (default=no)])],
|
||||
[case "${enableval}" in
|
||||
yes) documentation_enabled=yes;;
|
||||
no) documentation_enabled=no;;
|
||||
*) AC_MSG_ERROR("Bad value for --disable-documentation");;
|
||||
esac],
|
||||
[documentation_enabled=yes]
|
||||
)
|
||||
if test "$documentation_enabled" = "yes" ; then
|
||||
AC_CHECK_PROG(DOXYGEN,doxygen,doxygen,false)
|
||||
else
|
||||
DOXYGEN=false
|
||||
fi
|
||||
AM_CONDITIONAL(HAVE_DOXYGEN, test "$DOXYGEN" != "false")
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1330,11 +1330,7 @@ handle_configfile_migration()
|
|||
char *old_cfg_gui;
|
||||
char *old_cfg_cli;
|
||||
char *new_cfg;
|
||||
#if !defined(_WIN32_WCE)
|
||||
const char *home = getenv("HOME");
|
||||
#else
|
||||
const char *home = ".";
|
||||
#endif /*_WIN32_WCE*/
|
||||
new_cfg = ms_strdup_printf("%s/.linphonerc", home);
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -127,6 +127,9 @@ set(LIBS
|
|||
${MEDIASTREAMER2_LIBRARIES}
|
||||
${XML2_LIBRARIES}
|
||||
)
|
||||
if(ZLIB_FOUND)
|
||||
list(APPEND LIBS ${ZLIB_LIBRARIES})
|
||||
endif()
|
||||
if(SQLITE3_FOUND)
|
||||
list(APPEND LIBS ${SQLITE3_LIBRARIES})
|
||||
endif()
|
||||
|
|
@ -139,7 +142,7 @@ endif()
|
|||
if(ENABLE_ASSISTANT)
|
||||
list(APPEND LIBS ${SOUP_LIBRARIES})
|
||||
endif()
|
||||
if(WIN32)
|
||||
if(WIN32 AND NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone")
|
||||
list(APPEND LIBS shlwapi)
|
||||
endif()
|
||||
|
||||
|
|
@ -159,6 +162,9 @@ else()
|
|||
endif()
|
||||
endif()
|
||||
endif()
|
||||
if(WIN32 AND "${CMAKE_SYSTEM_NAME}" STREQUAL "WindowsPhone")
|
||||
set_target_properties(linphone PROPERTIES PREFIX "lib")
|
||||
endif()
|
||||
if(ICONV_FOUND)
|
||||
target_include_directories(linphone PUBLIC ${ICONV_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@ endif
|
|||
AM_CPPFLAGS=\
|
||||
-I$(top_srcdir) -I$(top_srcdir)/include -I$(builddir) \
|
||||
$(ORTP_CFLAGS) \
|
||||
$(MEDIASTREAMER_CFLAGS)
|
||||
$(MEDIASTREAMER_CFLAGS)
|
||||
|
||||
COMMON_CFLAGS=\
|
||||
$(STRICT_OPTIONS) \
|
||||
|
|
@ -200,14 +200,14 @@ make_gitversion_h:
|
|||
if test -n "$(GITLOG)" ; then \
|
||||
if test "$(GITDESCRIBE)" != "" ; then \
|
||||
if test "$(GIT_TAG)" != "$(PACKAGE_VERSION)" ; then \
|
||||
echo "*** PACKAGE_VERSION and git tag differ. Please put them identical."; \
|
||||
$(ECHO) "*** PACKAGE_VERSION and git tag differ. Please put them identical."; \
|
||||
exit 1; \
|
||||
fi ; \
|
||||
$(ECHO) -n "#define LIBLINPHONE_GIT_VERSION \"$(GITDESCRIBE)\"" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
printf "#define LIBLINPHONE_GIT_VERSION \"$(GITDESCRIBE)\"\n" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
elif test "$(GITREVISION)" != "" ; then \
|
||||
$(ECHO) -n "#define LIBLINPHONE_GIT_VERSION \"$(LINPHONE_VERSION)_$(GITREVISION)\"" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
printf "#define LIBLINPHONE_GIT_VERSION \"$(LINPHONE_VERSION)_$(GITREVISION)\"\n" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
else \
|
||||
$(ECHO) -n "" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
printf "" > $(builddir)/$(GITVERSION_FILE_TMP) ; \
|
||||
fi ; \
|
||||
if ! test -f $(builddir)/$(GITVERSION_FILE) ; then \
|
||||
cp -f $(builddir)/$(GITVERSION_FILE_TMP) $(builddir)/$(GITVERSION_FILE) ; \
|
||||
|
|
|
|||
|
|
@ -107,6 +107,7 @@ struct SalOp{
|
|||
bool_t has_auth_pending;
|
||||
SalOpSDPHandling sdp_handling;
|
||||
int auth_requests; /*number of auth requested for this op*/
|
||||
bool_t cnx_ip_to_0000_if_sendonly_enabled; /*for */
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,14 @@ static void call_set_error(SalOp* op,belle_sip_response_t* response){
|
|||
sal_op_set_error_info_from_response(op,response);
|
||||
op->base.root->callbacks.call_failure(op);
|
||||
}
|
||||
|
||||
static void set_addr_to_0000(char value[]) {
|
||||
if (ms_is_ipv6(value)) {
|
||||
strcpy(value,"::0");
|
||||
} else {
|
||||
strcpy(value,"0.0.0.0");
|
||||
}
|
||||
return;
|
||||
}
|
||||
static void sdp_process(SalOp *h){
|
||||
ms_message("Doing SDP offer/answer process of type %s",h->sdp_offering ? "outgoing" : "incoming");
|
||||
if (h->result){
|
||||
|
|
@ -56,6 +63,15 @@ static void sdp_process(SalOp *h){
|
|||
belle_sip_object_unref(h->sdp_answer);
|
||||
}
|
||||
offer_answer_initiate_incoming(h->base.local_media,h->base.remote_media,h->result,h->base.root->one_matching_codec);
|
||||
/*for backward compatibility purpose*/
|
||||
if(h->cnx_ip_to_0000_if_sendonly_enabled && sal_media_description_has_dir(h->result,SalStreamSendOnly)) {
|
||||
set_addr_to_0000(h->result->addr);
|
||||
for(i=0;i<h->result->nb_streams;++i){
|
||||
if (h->result->streams[i].dir == SalStreamSendOnly)
|
||||
set_addr_to_0000(h->result->streams[i].rtp_addr);
|
||||
set_addr_to_0000(h->result->streams[i].rtcp_addr);
|
||||
}
|
||||
}
|
||||
h->sdp_answer=(belle_sdp_session_description_t *)belle_sip_object_ref(media_description_to_sdp(h->result));
|
||||
/*once we have generated the SDP answer, we modify the result description for processing by the upper layer.
|
||||
It should contains media parameters constraint from the remote offer, not our response*/
|
||||
|
|
|
|||
|
|
@ -803,3 +803,9 @@ void sal_call_set_sdp_handling(SalOp *h, SalOpSDPHandling handling) {
|
|||
if (handling != SalOpSDPNormal) ms_message("Enabling special SDP handling for SalOp[%p]!", h);
|
||||
h->sdp_handling = handling;
|
||||
}
|
||||
void sal_op_cnx_ip_to_0000_if_sendonly_enable(SalOp *op,bool_t yesno) {
|
||||
op->cnx_ip_to_0000_if_sendonly_enabled = yesno;
|
||||
}
|
||||
bool_t sal_op_cnx_ip_to_0000_if_sendonly_enabled(SalOp *op) {
|
||||
return op->cnx_ip_to_0000_if_sendonly_enabled;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -366,8 +366,8 @@ belle_sdp_session_description_t * media_description_to_sdp ( const SalMediaDescr
|
|||
belle_sdp_session_description_set_session_name ( session_desc,
|
||||
belle_sdp_session_name_create ( desc->name[0]!='\0' ? desc->name : "Talk" ) );
|
||||
|
||||
if ( (!sal_media_description_has_dir ( desc,SalStreamSendOnly ) && !sal_media_description_has_dir ( desc,SalStreamInactive ))
|
||||
|| desc->ice_ufrag[0] != '\0' ) {
|
||||
if ( !sal_media_description_has_dir ( desc,SalStreamInactive ) || desc->ice_ufrag[0] != '\0' ) {
|
||||
/*in case of sendonly, setting of the IP on cnx we give a chance to receive stun packets*/
|
||||
belle_sdp_session_description_set_connection ( session_desc
|
||||
,belle_sdp_connection_create ( "IN",inet6 ? "IP6" :"IP4",desc->addr ) );
|
||||
|
||||
|
|
|
|||
|
|
@ -161,7 +161,7 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia
|
|||
linphone_core_enable_mic(lc, linphone_core_mic_enabled(lc));
|
||||
#ifdef VIDEO_ENABLED
|
||||
if (call->videostream && call->camera_enabled)
|
||||
video_stream_change_camera(call->videostream,lc->video_conf.device );
|
||||
video_stream_change_camera(call->videostream,linphone_call_get_video_device(call));
|
||||
#endif
|
||||
}
|
||||
/*FIXME ZRTP, might be restarted in any cases ? */
|
||||
|
|
@ -197,6 +197,15 @@ void linphone_core_update_streams(LinphoneCore *lc, LinphoneCall *call, SalMedia
|
|||
if (call->params->real_early_media && call->state==LinphoneCallOutgoingEarlyMedia){
|
||||
prepare_early_media_forking(call);
|
||||
}
|
||||
#ifdef VIDEO_ENABLED
|
||||
if (call->state==LinphoneCallPausing) {
|
||||
/*change cam to noweb cam*/
|
||||
call->cam = get_nowebcam_device();
|
||||
} else if (call->state != LinphoneCallPaused) {
|
||||
/*restaure web cam*/
|
||||
call->cam = lc->video_conf.device;
|
||||
}
|
||||
#endif /*VIDEO*/
|
||||
linphone_call_start_media_streams(call,all_muted,send_ringbacktone);
|
||||
if (call->state==LinphoneCallPausing && call->paused_by_app && ms_list_size(lc->calls)==1){
|
||||
linphone_core_play_named_tone(lc,LinphoneToneCallOnHold);
|
||||
|
|
@ -491,8 +500,6 @@ static void call_accepted(SalOp *op){
|
|||
#endif //BUILD_UPNP
|
||||
|
||||
md=sal_call_get_final_media_description(op);
|
||||
if (md) /*make sure re-invite will not propose video again*/
|
||||
call->params->has_video &= linphone_core_media_description_contains_video_stream(md);
|
||||
|
||||
switch (call->state){
|
||||
case LinphoneCallOutgoingProgress:
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ static const char EC_STATE_STORE[] = ".linphone.ecstate";
|
|||
static void linphone_call_stats_uninit(LinphoneCallStats *stats);
|
||||
|
||||
#ifdef VIDEO_ENABLED
|
||||
static MSWebCam *get_nowebcam_device(){
|
||||
MSWebCam *get_nowebcam_device(){
|
||||
return ms_web_cam_manager_get_cam(ms_web_cam_manager_get(),"StaticImage: Static picture");
|
||||
}
|
||||
#endif
|
||||
|
|
@ -555,7 +555,7 @@ static void transfer_already_assigned_payload_types(SalMediaDescription *old, Sa
|
|||
}
|
||||
|
||||
static const char *linphone_call_get_bind_ip_for_stream(LinphoneCall *call, int stream_index){
|
||||
const char *bind_ip=call->af==AF_INET6 ? "::0" : "0.0.0.0";
|
||||
const char *bind_ip = lp_config_get_string(call->core->config,"rtp","bind_address",call->af==AF_INET6 ? "::0" : "0.0.0.0"); ;
|
||||
|
||||
if (stream_index<2 && call->media_ports[stream_index].multicast_ip[0]!='\0'){
|
||||
if (call->dir==LinphoneCallOutgoing){
|
||||
|
|
@ -611,7 +611,8 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
|
|||
md->nb_streams=(call->biggestdesc ? call->biggestdesc->nb_streams : 1);
|
||||
|
||||
strncpy(md->addr,call->localip,sizeof(md->addr));
|
||||
strncpy(md->username,linphone_address_get_username(addr),sizeof(md->username));
|
||||
if (linphone_address_get_username(addr)) /*might be null in case of identity without userinfo*/
|
||||
strncpy(md->username,linphone_address_get_username(addr),sizeof(md->username));
|
||||
if (subject) strncpy(md->name,subject,sizeof(md->name));
|
||||
|
||||
if (call->params->down_bw)
|
||||
|
|
@ -647,7 +648,7 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
|
|||
ms_warning("Cannot get audio local ssrc for call [%p]",call);
|
||||
nb_active_streams++;
|
||||
|
||||
if (call->params->has_video){
|
||||
if (call->params->has_video && (!call->params->internal_call_update || !call->current_params->video_declined)){
|
||||
strncpy(md->streams[1].rtp_addr,linphone_call_get_public_ip_for_stream(call,1),sizeof(md->streams[1].rtp_addr));
|
||||
strncpy(md->streams[1].rtcp_addr,linphone_call_get_public_ip_for_stream(call,1),sizeof(md->streams[1].rtcp_addr));
|
||||
strncpy(md->streams[1].name,"Video",sizeof(md->streams[1].name)-1);
|
||||
|
|
@ -670,6 +671,8 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *
|
|||
else
|
||||
ms_warning("Cannot get video local ssrc for call [%p]",call);
|
||||
nb_active_streams++;
|
||||
} else {
|
||||
ms_message("Don't put video stream on local offer for call [%p]",call);
|
||||
}
|
||||
|
||||
if (md->nb_streams < nb_active_streams)
|
||||
|
|
@ -817,7 +820,9 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from,
|
|||
|
||||
linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_AUDIO], LINPHONE_CALL_STATS_AUDIO);
|
||||
linphone_call_init_stats(&call->stats[LINPHONE_CALL_STATS_VIDEO], LINPHONE_CALL_STATS_VIDEO);
|
||||
|
||||
#ifdef VIDEO_ENABLED
|
||||
call->cam = call->core->video_conf.device;
|
||||
#endif
|
||||
}
|
||||
|
||||
void linphone_call_init_stats(LinphoneCallStats *stats, int type) {
|
||||
|
|
@ -973,7 +978,6 @@ static void linphone_call_incoming_select_ip_version(LinphoneCall *call){
|
|||
*/
|
||||
void linphone_call_set_compatible_incoming_call_parameters(LinphoneCall *call, const SalMediaDescription *md) {
|
||||
int i;
|
||||
call->params->has_video &= linphone_core_media_description_contains_video_stream(md);
|
||||
|
||||
/* Handle AVPF, SRTP and DTLS. */
|
||||
call->params->avpf_enabled = sal_media_description_has_avpf(md);
|
||||
|
|
@ -1013,6 +1017,8 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro
|
|||
call->core=lc;
|
||||
linphone_call_incoming_select_ip_version(call);
|
||||
|
||||
sal_op_cnx_ip_to_0000_if_sendonly_enable(op,lp_config_get_default_int(lc->config,"sip","cnx_ip_to_0000_if_sendonly_enabled",0));
|
||||
|
||||
if (lc->sip_conf.ping_with_options){
|
||||
#ifdef BUILD_UPNP
|
||||
if (lc->upnp != NULL && linphone_core_get_firewall_policy(lc)==LinphonePolicyUseUpnp &&
|
||||
|
|
@ -1171,8 +1177,11 @@ static void linphone_call_set_terminated(LinphoneCall *call){
|
|||
}
|
||||
|
||||
void linphone_call_fix_call_parameters(LinphoneCall *call){
|
||||
call->params->has_video=call->current_params->has_video;
|
||||
|
||||
if (sal_call_is_offerer(call->op)) {
|
||||
/*get remote params*/
|
||||
const LinphoneCallParams* lcp = linphone_call_get_remote_params(call);
|
||||
call->current_params->video_declined = call->params->has_video && !lcp->has_video;
|
||||
}
|
||||
switch(call->params->media_encryption) {
|
||||
case LinphoneMediaEncryptionZRTP:
|
||||
case LinphoneMediaEncryptionDTLS:
|
||||
|
|
@ -1292,6 +1301,11 @@ void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const
|
|||
linphone_core_multicast_lock_release(call->core);
|
||||
#endif
|
||||
break;
|
||||
case LinphoneCallStreamsRunning:
|
||||
if (call->prevstate == LinphoneCallUpdating || call->prevstate == LinphoneCallUpdatedByRemote) {
|
||||
linphone_core_notify_display_status(lc,_("Call parameters were successfully modified."));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -1651,16 +1665,17 @@ LinphoneCall *linphone_call_get_replaced_call(LinphoneCall *call){
|
|||
**/
|
||||
void linphone_call_enable_camera (LinphoneCall *call, bool_t enable){
|
||||
#ifdef VIDEO_ENABLED
|
||||
call->camera_enabled=enable;
|
||||
if ((call->state==LinphoneCallStreamsRunning || call->state==LinphoneCallOutgoingEarlyMedia || call->state==LinphoneCallIncomingEarlyMedia)
|
||||
&& call->videostream!=NULL ){
|
||||
LinphoneCore *lc=call->core;
|
||||
MSWebCam *nowebcam=get_nowebcam_device();
|
||||
if (call->camera_enabled!=enable && lc->video_conf.device!=nowebcam){
|
||||
video_stream_change_camera(call->videostream,
|
||||
enable ? lc->video_conf.device : nowebcam);
|
||||
&& call->videostream!=NULL && video_stream_started(call->videostream) ){
|
||||
if (video_stream_get_camera(call->videostream) != linphone_call_get_video_device(call)) {
|
||||
const char *cur_cam, *new_cam;
|
||||
cur_cam = video_stream_get_camera(call->videostream) ? ms_web_cam_get_name(video_stream_get_camera(call->videostream)) : "NULL";
|
||||
new_cam = linphone_call_get_video_device(call) ? ms_web_cam_get_name(linphone_call_get_video_device(call)) : "NULL";
|
||||
ms_message("Switching video cam from [%s] to [%s] on call [%p]" , cur_cam, new_cam, call);
|
||||
video_stream_change_camera(call->videostream, linphone_call_get_video_device(call));
|
||||
}
|
||||
}
|
||||
call->camera_enabled=enable;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
|
@ -1669,7 +1684,11 @@ void linphone_call_enable_camera (LinphoneCall *call, bool_t enable){
|
|||
**/
|
||||
void linphone_call_send_vfu_request(LinphoneCall *call) {
|
||||
#ifdef VIDEO_ENABLED
|
||||
if (call->core->sip_conf.vfu_with_info) {
|
||||
const LinphoneCallParams *current_params = linphone_call_get_current_params(call);
|
||||
if (current_params->avpf_enabled && call->videostream && media_stream_get_state((const MediaStream *)call->videostream) == MSStreamStarted) {
|
||||
ms_message("Request Full Intra Request on call [%p]", call);
|
||||
video_stream_send_fir(call->videostream);
|
||||
} else if (call->core->sip_conf.vfu_with_info) {
|
||||
if (LinphoneCallStreamsRunning == linphone_call_get_state(call))
|
||||
sal_call_send_vfu_request(call->op);
|
||||
} else {
|
||||
|
|
@ -2349,7 +2368,7 @@ void static start_dtls_on_all_streams(LinphoneCall *call) {
|
|||
SalMediaDescription *remote_desc = sal_call_get_remote_media_description(call->op);
|
||||
SalMediaDescription *result_desc = sal_call_get_final_media_description(call->op);
|
||||
if( remote_desc == NULL || result_desc == NULL ){
|
||||
ms_warning("Invalid remote or result media description, disabling DTLS");
|
||||
/* this can happen in some tricky cases (early-media without SDP in the 200). In that case, simply skip DTLS code */
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2384,7 +2403,7 @@ void static set_dtls_fingerprint_on_all_streams(LinphoneCall *call) {
|
|||
SalMediaDescription *result_desc = sal_call_get_final_media_description(call->op);
|
||||
|
||||
if( remote_desc == NULL || result_desc == NULL ){
|
||||
ms_warning("Invalid remote or final media desc, aborting DTLS fingerprinting");
|
||||
/* this can happen in some tricky cases (early-media without SDP in the 200). In that case, simply skip DTLS code */
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -2566,9 +2585,8 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu
|
|||
|
||||
if (used_pt!=-1){
|
||||
VideoStreamDir dir=VideoStreamSendRecv;
|
||||
MSWebCam *cam=lc->video_conf.device;
|
||||
bool_t is_inactive=FALSE;
|
||||
|
||||
MSWebCam *cam;
|
||||
call->current_params->video_codec = rtp_profile_get_payload(call->video_profile, used_pt);
|
||||
call->current_params->has_video=TRUE;
|
||||
|
||||
|
|
@ -2596,10 +2614,6 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu
|
|||
else
|
||||
dir=VideoStreamSendOnly;
|
||||
} else if (vstream->dir==SalStreamSendOnly && lc->video_conf.capture ){
|
||||
if (local_st_desc->dir==SalStreamSendOnly){
|
||||
/* localdesc stream dir to SendOnly is when we want to put on hold, so use nowebcam in this case*/
|
||||
cam=get_nowebcam_device();
|
||||
}
|
||||
dir=VideoStreamSendOnly;
|
||||
}else if (vstream->dir==SalStreamRecvOnly && lc->video_conf.display ){
|
||||
dir=VideoStreamRecvOnly;
|
||||
|
|
@ -2615,8 +2629,10 @@ static void linphone_call_start_video_stream(LinphoneCall *call, bool_t all_inpu
|
|||
/*either inactive or incompatible with local capabilities*/
|
||||
is_inactive=TRUE;
|
||||
}
|
||||
if (call->camera_enabled==FALSE || all_inputs_muted){
|
||||
if (all_inputs_muted){
|
||||
cam=get_nowebcam_device();
|
||||
} else {
|
||||
cam = linphone_call_get_video_device(call);
|
||||
}
|
||||
if (!is_inactive){
|
||||
if (sal_stream_description_has_srtp(vstream) == TRUE) {
|
||||
|
|
@ -2669,6 +2685,7 @@ static void setZrtpCryptoTypesParameters(MSZrtpParams *params, LinphoneCore *lc)
|
|||
{
|
||||
int i;
|
||||
const MSCryptoSuite *srtp_suites;
|
||||
MsZrtpCryptoTypesCount ciphersCount, authTagsCount;
|
||||
|
||||
if (params == NULL) return;
|
||||
if (lc == NULL) return;
|
||||
|
|
@ -2705,7 +2722,18 @@ static void setZrtpCryptoTypesParameters(MSZrtpParams *params, LinphoneCore *lc)
|
|||
}
|
||||
}
|
||||
|
||||
params->keyAgreementsCount = linphone_core_get_zrtp_key_agreements(lc, params->keyAgreements);
|
||||
/* linphone_core_get_srtp_crypto_suites is used to determine sensible defaults; here each can be overridden */
|
||||
ciphersCount = linphone_core_get_zrtp_cipher_suites(lc, params->ciphers); /* if not present in config file, params->ciphers is not modified */
|
||||
if (ciphersCount!=0) { /* use zrtp_cipher_suites config only when present, keep config from srtp_crypto_suite otherwise */
|
||||
params->ciphersCount = ciphersCount;
|
||||
}
|
||||
params->hashesCount = linphone_core_get_zrtp_hash_suites(lc, params->hashes);
|
||||
authTagsCount = linphone_core_get_zrtp_auth_suites(lc, params->authTags); /* if not present in config file, params->authTags is not modified */
|
||||
if (authTagsCount!=0) {
|
||||
params->authTagsCount = authTagsCount; /* use zrtp_auth_suites config only when present, keep config from srtp_crypto_suite otherwise */
|
||||
}
|
||||
params->sasTypesCount = linphone_core_get_zrtp_sas_suites(lc, params->sasTypes);
|
||||
params->keyAgreementsCount = linphone_core_get_zrtp_key_agreement_suites(lc, params->keyAgreements);
|
||||
}
|
||||
|
||||
void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_muted, bool_t send_ringbacktone){
|
||||
|
|
@ -3313,6 +3341,17 @@ static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *v
|
|||
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;
|
||||
if (as_active) {
|
||||
call->stats[LINPHONE_CALL_STATS_AUDIO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE;
|
||||
linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_AUDIO]);
|
||||
call->stats[LINPHONE_CALL_STATS_AUDIO].updated=0;
|
||||
}
|
||||
if (vs_active) {
|
||||
call->stats[LINPHONE_CALL_STATS_VIDEO].updated|=LINPHONE_CALL_STATS_PERIODICAL_UPDATE;
|
||||
linphone_core_notify_call_stats_updated(call->core, call, &call->stats[LINPHONE_CALL_STATS_VIDEO]);
|
||||
call->stats[LINPHONE_CALL_STATS_VIDEO].updated=0;
|
||||
|
||||
}
|
||||
|
||||
ms_message( "Bandwidth usage for call [%p]:\n"
|
||||
"\tRTP audio=[d=%5.1f,u=%5.1f], video=[d=%5.1f,u=%5.1f] kbits/sec\n"
|
||||
|
|
@ -3327,6 +3366,7 @@ static void report_bandwidth(LinphoneCall *call, MediaStream *as, MediaStream *v
|
|||
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){
|
||||
|
|
@ -3394,6 +3434,7 @@ static void handle_ice_events(LinphoneCall *call, OrtpEvent *ev){
|
|||
ice_session_select_candidates(call->ice_session);
|
||||
if (ice_session_role(call->ice_session) == IR_Controlling
|
||||
&& lp_config_get_int(call->core->config, "sip", "update_call_when_ice_completed", TRUE)) {
|
||||
params->internal_call_update = TRUE;
|
||||
linphone_core_update_call(call->core, call, params);
|
||||
}
|
||||
change_ice_media_destinations(call);
|
||||
|
|
@ -3404,6 +3445,7 @@ static void handle_ice_events(LinphoneCall *call, OrtpEvent *ev){
|
|||
ice_session_select_candidates(call->ice_session);
|
||||
if (ice_session_role(call->ice_session) == IR_Controlling) {
|
||||
/* At least one ICE session has succeeded, so perform a call update. */
|
||||
params->internal_call_update = TRUE;
|
||||
linphone_core_update_call(call->core, call, params);
|
||||
}
|
||||
}
|
||||
|
|
@ -3499,7 +3541,13 @@ void linphone_call_notify_stats_updated(LinphoneCall *call, int stream_index){
|
|||
LinphoneCallStats *stats=&call->stats[stream_index];
|
||||
LinphoneCore *lc=call->core;
|
||||
if (stats->updated){
|
||||
linphone_reporting_on_rtcp_update(call, stream_index);
|
||||
switch(stats->updated) {
|
||||
case LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE:
|
||||
case LINPHONE_CALL_STATS_SENT_RTCP_UPDATE:
|
||||
linphone_reporting_on_rtcp_update(call, stream_index);
|
||||
break;
|
||||
default:break;
|
||||
}
|
||||
linphone_core_notify_call_stats_updated(lc, call, stats);
|
||||
stats->updated = 0;
|
||||
}
|
||||
|
|
@ -3563,18 +3611,29 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse
|
|||
int disconnect_timeout = linphone_core_get_nortp_timeout(call->core);
|
||||
bool_t disconnected=FALSE;
|
||||
|
||||
if ((call->state==LinphoneCallStreamsRunning || call->state==LinphoneCallOutgoingEarlyMedia || call->state==LinphoneCallIncomingEarlyMedia) && one_second_elapsed){
|
||||
float audio_load=0, video_load=0;
|
||||
if (call->audiostream!=NULL){
|
||||
if (call->audiostream->ms.sessions.ticker)
|
||||
audio_load=ms_ticker_get_average_load(call->audiostream->ms.sessions.ticker);
|
||||
switch (call->state) {
|
||||
case LinphoneCallStreamsRunning:
|
||||
case LinphoneCallOutgoingEarlyMedia:
|
||||
case LinphoneCallIncomingEarlyMedia:
|
||||
case LinphoneCallPausedByRemote:
|
||||
case LinphoneCallPaused:
|
||||
if (one_second_elapsed){
|
||||
float audio_load=0, video_load=0;
|
||||
if (call->audiostream!=NULL){
|
||||
if (call->audiostream->ms.sessions.ticker)
|
||||
audio_load=ms_ticker_get_average_load(call->audiostream->ms.sessions.ticker);
|
||||
}
|
||||
if (call->videostream!=NULL){
|
||||
if (call->videostream->ms.sessions.ticker)
|
||||
video_load=ms_ticker_get_average_load(call->videostream->ms.sessions.ticker);
|
||||
}
|
||||
report_bandwidth(call,(MediaStream*)call->audiostream,(MediaStream*)call->videostream);
|
||||
ms_message("Thread processing load: audio=%f\tvideo=%f",audio_load,video_load);
|
||||
}
|
||||
if (call->videostream!=NULL){
|
||||
if (call->videostream->ms.sessions.ticker)
|
||||
video_load=ms_ticker_get_average_load(call->videostream->ms.sessions.ticker);
|
||||
}
|
||||
report_bandwidth(call,(MediaStream*)call->audiostream,(MediaStream*)call->videostream);
|
||||
ms_message("Thread processing load: audio=%f\tvideo=%f",audio_load,video_load);
|
||||
break;
|
||||
default:
|
||||
/*no stats for other states*/
|
||||
break;
|
||||
}
|
||||
|
||||
#ifdef BUILD_UPNP
|
||||
|
|
@ -3838,3 +3897,11 @@ void linphone_call_set_native_video_window_id(LinphoneCall *call, unsigned long
|
|||
}
|
||||
#endif
|
||||
}
|
||||
#ifdef VIDEO_ENABLED
|
||||
MSWebCam *linphone_call_get_video_device(const LinphoneCall *call) {
|
||||
if (call->camera_enabled==FALSE)
|
||||
return get_nowebcam_device();
|
||||
else
|
||||
return call->cam;
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -171,6 +171,10 @@ void linphone_core_set_log_file(FILE *file) {
|
|||
}
|
||||
|
||||
void linphone_core_set_log_level(OrtpLogLevel loglevel) {
|
||||
linphone_core_set_log_level_mask(loglevel);
|
||||
}
|
||||
|
||||
void linphone_core_set_log_level_mask(OrtpLogLevel loglevel) {
|
||||
ortp_set_log_level_mask(loglevel);
|
||||
if (loglevel == 0) {
|
||||
sal_disable_logs();
|
||||
|
|
@ -1095,7 +1099,7 @@ static bool_t get_codec(LinphoneCore *lc, SalStreamType type, int index, Payload
|
|||
MSList **default_list=(type==SalAudio) ? &lc->default_audio_codecs : &lc->default_video_codecs;
|
||||
if (type==SalAudio)
|
||||
ms_warning("Codec %s/%i/%i read from conf is not in the default list.",mime,rate,channels);
|
||||
else
|
||||
else
|
||||
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;
|
||||
|
|
@ -1165,14 +1169,18 @@ static void codecs_config_read(LinphoneCore *lc)
|
|||
audio_codecs=codec_append_if_new(audio_codecs, pt);
|
||||
}
|
||||
}
|
||||
audio_codecs=add_missing_codecs(lc->default_audio_codecs,audio_codecs);
|
||||
if( lp_config_get_int(lc->config, "misc", "add_missing_audio_codecs", 1) == 1 ){
|
||||
audio_codecs=add_missing_codecs(lc->default_audio_codecs,audio_codecs);
|
||||
}
|
||||
|
||||
for (i=0;get_codec(lc,SalVideo,i,&pt);i++){
|
||||
if (pt){
|
||||
video_codecs=codec_append_if_new(video_codecs, pt);
|
||||
}
|
||||
}
|
||||
video_codecs=add_missing_codecs(lc->default_video_codecs,video_codecs);
|
||||
if( lp_config_get_int(lc->config, "misc", "add_missing_video_codecs", 1) == 1 ){
|
||||
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);
|
||||
|
|
@ -1314,7 +1322,7 @@ void linphone_core_set_adaptive_rate_algorithm(LinphoneCore *lc, const char* alg
|
|||
* See linphone_core_set_adaptive_rate_algorithm().
|
||||
**/
|
||||
const char * linphone_core_get_adaptive_rate_algorithm(const LinphoneCore *lc){
|
||||
return lp_config_get_string(lc->config, "net", "adaptive_rate_algorithm", "Stateful");
|
||||
return lp_config_get_string(lc->config, "net", "adaptive_rate_algorithm", "Simple");
|
||||
}
|
||||
|
||||
bool_t linphone_core_rtcp_enabled(const LinphoneCore *lc){
|
||||
|
|
@ -1565,7 +1573,7 @@ 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__
|
||||
#if defined(__arm__) || defined(_M_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
|
||||
|
|
@ -1646,10 +1654,9 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab
|
|||
ms_init();
|
||||
|
||||
linphone_core_register_default_codecs(lc);
|
||||
/* create a mediastreamer2 event queue and set it as global */
|
||||
/* Get the mediastreamer2 event queue */
|
||||
/* This allows to run event's callback in linphone_core_iterate() */
|
||||
lc->msevq=ms_event_queue_new();
|
||||
ms_set_global_event_queue(lc->msevq);
|
||||
lc->msevq=ms_factory_get_event_queue(ms_factory_get_fallback());
|
||||
|
||||
lc->sal=sal_init();
|
||||
|
||||
|
|
@ -1754,12 +1761,21 @@ int linphone_core_set_primary_contact(LinphoneCore *lc, const char *contact)
|
|||
{
|
||||
LinphoneAddress *ctt;
|
||||
|
||||
if( lc->sip_conf.contact != NULL && strcmp(lc->sip_conf.contact, contact) == 0){
|
||||
/* changing for the same contact: no need to do anything */
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ((ctt=linphone_address_new(contact))==0) {
|
||||
ms_error("Bad contact url: %s",contact);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (lc->sip_conf.contact!=NULL) ms_free(lc->sip_conf.contact);
|
||||
lc->sip_conf.contact=ms_strdup(contact);
|
||||
lp_config_set_string(lc->config, "sip", "contact", lc->sip_conf.contact);
|
||||
|
||||
/* clean the guessed contact, we have to regenerate it */
|
||||
if (lc->sip_conf.guessed_contact!=NULL){
|
||||
ms_free(lc->sip_conf.guessed_contact);
|
||||
lc->sip_conf.guessed_contact=NULL;
|
||||
|
|
@ -2223,7 +2239,7 @@ int _linphone_core_apply_transports(LinphoneCore *lc){
|
|||
Sal *sal=lc->sal;
|
||||
const char *anyaddr;
|
||||
LCSipTransports *tr=&lc->sip_conf.transports;
|
||||
|
||||
const char* listening_address;
|
||||
/*first of all invalidate all current registrations so that we can register again with new transports*/
|
||||
__linphone_core_invalidate_registers(lc);
|
||||
|
||||
|
|
@ -2233,24 +2249,27 @@ int _linphone_core_apply_transports(LinphoneCore *lc){
|
|||
anyaddr="0.0.0.0";
|
||||
|
||||
sal_unlisten_ports(sal);
|
||||
|
||||
listening_address = lp_config_get_string(lc->config,"sip","bind_address",anyaddr);
|
||||
|
||||
if (lc->tunnel && linphone_tunnel_sip_enabled(lc->tunnel) && linphone_tunnel_get_activated(lc->tunnel)){
|
||||
if (sal_listen_port(sal,anyaddr,tr->udp_port,SalTransportUDP,TRUE)!=0){
|
||||
transport_error(lc,"udp+tunnel",tr->udp_port);
|
||||
}
|
||||
}else{
|
||||
if (tr->udp_port!=0){
|
||||
if (sal_listen_port(sal,anyaddr,tr->udp_port,SalTransportUDP,FALSE)!=0){
|
||||
if (sal_listen_port(sal,listening_address,tr->udp_port,SalTransportUDP,FALSE)!=0){
|
||||
transport_error(lc,"udp",tr->udp_port);
|
||||
}
|
||||
}
|
||||
if (tr->tcp_port!=0){
|
||||
if (sal_listen_port (sal,anyaddr,tr->tcp_port,SalTransportTCP,FALSE)!=0){
|
||||
if (sal_listen_port (sal,listening_address,tr->tcp_port,SalTransportTCP,FALSE)!=0){
|
||||
transport_error(lc,"tcp",tr->tcp_port);
|
||||
}
|
||||
}
|
||||
if (linphone_core_sip_transport_supported(lc,LinphoneTransportTls)){
|
||||
if (tr->tls_port!=0){
|
||||
if (sal_listen_port (sal,anyaddr,tr->tls_port,SalTransportTLS,FALSE)!=0){
|
||||
if (sal_listen_port (sal,listening_address,tr->tls_port,SalTransportTLS,FALSE)!=0){
|
||||
transport_error(lc,"tls",tr->tls_port);
|
||||
}
|
||||
}
|
||||
|
|
@ -2311,7 +2330,7 @@ int linphone_core_set_sip_transports(LinphoneCore *lc, const LCSipTransports * t
|
|||
/**
|
||||
* Retrieves the port configuration used for each transport (udp, tcp, tls).
|
||||
* A zero value port for a given transport means the transport
|
||||
* is not used. A value of LC_SIP_TRANSPORT_RANDOM (-1) means the port is to be choosen randomly by the system.
|
||||
* is not used. A value of LC_SIP_TRANSPORT_RANDOM (-1) means the port is to be chosen randomly by the system.
|
||||
* @ingroup network_parameters
|
||||
**/
|
||||
int linphone_core_get_sip_transports(LinphoneCore *lc, LCSipTransports *tr){
|
||||
|
|
@ -3115,6 +3134,7 @@ void linphone_configure_op(LinphoneCore *lc, SalOp *op, const LinphoneAddress *d
|
|||
sal_address_destroy(new_contact);
|
||||
}
|
||||
}
|
||||
sal_op_cnx_ip_to_0000_if_sendonly_enable(op,lp_config_get_default_int(lc->config,"sip","cnx_ip_to_0000_if_sendonly_enabled",0)); /*also set in linphone_call_new_incoming*/
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -3639,7 +3659,6 @@ int _linphone_core_accept_call_update(LinphoneCore *lc, LinphoneCall *call, cons
|
|||
ms_warning("Video isn't supported in conference");
|
||||
call->params->has_video = FALSE;
|
||||
}
|
||||
call->params->has_video &= linphone_core_media_description_contains_video_stream(remote_desc);
|
||||
linphone_call_init_media_streams(call); /*so that video stream is initialized if necessary*/
|
||||
if (call->ice_session != NULL) {
|
||||
if (linphone_call_prepare_ice(call,TRUE)==1)
|
||||
|
|
@ -4158,6 +4177,9 @@ int linphone_core_get_inc_timeout(LinphoneCore *lc){
|
|||
**/
|
||||
void linphone_core_set_in_call_timeout(LinphoneCore *lc, int seconds){
|
||||
lc->sip_conf.in_call_timeout=seconds;
|
||||
if( linphone_core_ready(lc)){
|
||||
lp_config_set_int(lc->config, "sip", "in_call_timeout", seconds);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -4809,7 +4831,7 @@ static void linphone_core_mute_audio_stream(LinphoneCore *lc, AudioStream *st, b
|
|||
} else {
|
||||
audio_stream_set_mic_gain_db(st, lc->sound_conf.soft_mic_lev);
|
||||
}
|
||||
|
||||
|
||||
if ( linphone_core_get_rtp_no_xmit_on_audio_mute(lc) ){
|
||||
audio_stream_mute_rtp(st,val);
|
||||
}
|
||||
|
|
@ -6323,7 +6345,6 @@ static void linphone_core_uninit(LinphoneCore *lc)
|
|||
}
|
||||
#endif
|
||||
|
||||
ms_event_queue_destroy(lc->msevq);
|
||||
lc->msevq=NULL;
|
||||
/* save all config */
|
||||
ui_config_uninit(lc);
|
||||
|
|
@ -6886,9 +6907,7 @@ const char *linphone_media_encryption_to_string(LinphoneMediaEncryption menc){
|
|||
return "INVALID";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether a media encryption scheme is supported by the LinphoneCore engine
|
||||
**/
|
||||
|
||||
bool_t linphone_core_media_encryption_supported(const LinphoneCore *lc, LinphoneMediaEncryption menc){
|
||||
switch(menc){
|
||||
case LinphoneMediaEncryptionSRTP:
|
||||
|
|
|
|||
|
|
@ -513,6 +513,7 @@ typedef enum _LinphoneUpnpState LinphoneUpnpState;
|
|||
|
||||
#define LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE (1 << 0) /**< received_rtcp field of LinphoneCallStats object has been updated */
|
||||
#define LINPHONE_CALL_STATS_SENT_RTCP_UPDATE (1 << 1) /**< sent_rtcp field of LinphoneCallStats object has been updated */
|
||||
#define LINPHONE_CALL_STATS_PERIODICAL_UPDATE (1 << 2) /**< Every seconds LinphoneCallStats object has been updated */
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -529,7 +530,7 @@ typedef struct _LinphoneCallStats LinphoneCallStats;
|
|||
* The LinphoneCallStats objects carries various statistic informations regarding quality of audio or video streams.
|
||||
*
|
||||
* To receive these informations periodically and as soon as they are computed, the application is invited to place a #LinphoneCoreCallStatsUpdatedCb callback in the LinphoneCoreVTable structure
|
||||
* it passes for instanciating the LinphoneCore object (see linphone_core_new() ).
|
||||
* it passes for instantiating the LinphoneCore object (see linphone_core_new() ).
|
||||
*
|
||||
* At any time, the application can access last computed statistics using linphone_call_get_audio_stats() or linphone_call_get_video_stats().
|
||||
**/
|
||||
|
|
@ -1166,7 +1167,7 @@ LINPHONE_PUBLIC const char *linphone_proxy_config_get_custom_header(LinphoneProx
|
|||
/**
|
||||
* Set the value of a custom header sent to the server in REGISTERs request.
|
||||
* @param cfg the proxy config object
|
||||
* @param header_name the header name
|
||||
* @param header_name the header name
|
||||
* @param header_value the header's value
|
||||
**/
|
||||
LINPHONE_PUBLIC void linphone_proxy_config_set_custom_header(LinphoneProxyConfig *cfg, const char *header_name, const char *header_value);
|
||||
|
|
@ -2072,6 +2073,12 @@ LINPHONE_PUBLIC void linphone_core_set_log_handler(OrtpLogFunc logfunc);
|
|||
* @param file A pointer to the FILE structure of the file to write to.
|
||||
*/
|
||||
LINPHONE_PUBLIC void linphone_core_set_log_file(FILE *file);
|
||||
|
||||
/**
|
||||
* @deprecated Use #linphone_core_set_log_level_mask instead, which is exactly the
|
||||
* same function..
|
||||
**/
|
||||
LINPHONE_PUBLIC void linphone_core_set_log_level(OrtpLogLevel loglevel);
|
||||
/**
|
||||
* Define the log level.
|
||||
*
|
||||
|
|
@ -2082,7 +2089,7 @@ LINPHONE_PUBLIC void linphone_core_set_log_file(FILE *file);
|
|||
*
|
||||
* @param loglevel A bitmask of the log levels to set.
|
||||
*/
|
||||
LINPHONE_PUBLIC void linphone_core_set_log_level(OrtpLogLevel loglevel);
|
||||
LINPHONE_PUBLIC void linphone_core_set_log_level_mask(OrtpLogLevel loglevel);
|
||||
LINPHONE_PUBLIC void linphone_core_enable_logs(FILE *file);
|
||||
LINPHONE_PUBLIC void linphone_core_enable_logs_with_cb(OrtpLogFunc logfunc);
|
||||
LINPHONE_PUBLIC void linphone_core_disable_logs(void);
|
||||
|
|
|
|||
|
|
@ -2892,6 +2892,21 @@ extern "C" jobject Java_org_linphone_core_LinphoneFriendImpl_getCore(JNIEnv* en
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
extern "C" void Java_org_linphone_core_LinphoneFriendImpl_setRefKey(JNIEnv* env
|
||||
,jobject thiz
|
||||
,jlong ptr
|
||||
,jstring jkey) {
|
||||
const char* key = env->GetStringUTFChars(jkey, NULL);
|
||||
linphone_friend_set_ref_key((LinphoneFriend*)ptr,key);
|
||||
env->ReleaseStringUTFChars(jkey, key);
|
||||
}
|
||||
extern "C" jstring Java_org_linphone_core_LinphoneFriendImpl_getRefKey(JNIEnv* env
|
||||
,jobject thiz
|
||||
,jlong ptr) {
|
||||
const char * key = linphone_friend_get_ref_key((LinphoneFriend *)ptr);
|
||||
return key ? env->NewStringUTF(key) : NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Class: org_linphone_core_LinphoneFriendImpl
|
||||
|
|
|
|||
|
|
@ -94,7 +94,16 @@ LpItem * lp_item_new(const char *key, const char *value){
|
|||
|
||||
LpItem * lp_comment_new(const char *comment){
|
||||
LpItem *item=lp_new0(LpItem,1);
|
||||
char* pos = NULL;
|
||||
item->value=ortp_strdup(comment);
|
||||
|
||||
pos=strchr(item->value,'\r');
|
||||
if (pos==NULL)
|
||||
pos=strchr(item->value,'\n');
|
||||
|
||||
if(pos) {
|
||||
*pos='\0'; /*replace the '\n' */
|
||||
}
|
||||
item->is_comment=TRUE;
|
||||
return item;
|
||||
}
|
||||
|
|
@ -567,7 +576,7 @@ void lp_config_set_float(LpConfig *lpconfig,const char *section, const char *key
|
|||
|
||||
void lp_item_write(LpItem *item, FILE *file){
|
||||
if (item->is_comment)
|
||||
fprintf(file,"%s",item->value);
|
||||
fprintf(file,"%s\n",item->value);
|
||||
else if (item->value && item->value[0] != '\0' )
|
||||
fprintf(file,"%s=%s\n",item->key,item->value);
|
||||
else {
|
||||
|
|
@ -696,18 +705,12 @@ const char* lp_config_get_default_string(const LpConfig *lpconfig, const char *s
|
|||
|
||||
static char *_lp_config_dirname(char *path) {
|
||||
#ifdef _MSC_VER
|
||||
#ifdef WINAPI_FAMILY_PHONE_APP
|
||||
char drive[_MAX_DRIVE];
|
||||
char dir[_MAX_DIR];
|
||||
char fname[_MAX_FNAME];
|
||||
char ext[_MAX_EXT];
|
||||
_splitpath(path, drive, dir, fname, ext);
|
||||
return ms_strdup_printf("%s%s", drive, dir);
|
||||
#else
|
||||
char *dir = ms_strdup(path);
|
||||
PathRemoveFileSpec(dir);
|
||||
return dir;
|
||||
#endif
|
||||
#else
|
||||
char *tmp = ms_strdup(path);
|
||||
char *dir = ms_strdup(dirname(tmp));
|
||||
|
|
@ -735,9 +738,14 @@ void lp_config_write_relative_file(const LpConfig *lpconfig, const char *filenam
|
|||
}
|
||||
|
||||
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);
|
||||
FILE *file = fopen(filepath, "r");
|
||||
char *dir;
|
||||
char *filepath;
|
||||
FILE *file;
|
||||
|
||||
if (lpconfig->filename == NULL) return -1;
|
||||
dir = _lp_config_dirname(lpconfig->filename);
|
||||
filepath = ms_strdup_printf("%s/%s", dir, filename);
|
||||
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));
|
||||
|
|
|
|||
109
coreapi/misc.c
109
coreapi/misc.c
|
|
@ -537,7 +537,7 @@ void linphone_core_adapt_to_network(LinphoneCore *lc, int ping_time_ms, Linphone
|
|||
|
||||
static void stun_server_resolved(LinphoneCore *lc, const char *name, struct addrinfo *addrinfo){
|
||||
if (lc->net_conf.stun_addrinfo){
|
||||
freeaddrinfo(lc->net_conf.stun_addrinfo);
|
||||
belle_sip_freeaddrinfo(lc->net_conf.stun_addrinfo);
|
||||
lc->net_conf.stun_addrinfo=NULL;
|
||||
}
|
||||
if (addrinfo){
|
||||
|
|
@ -555,7 +555,7 @@ void linphone_core_resolve_stun_server(LinphoneCore *lc){
|
|||
* TODO: use IPv6 resolution if linphone_core_ipv6_enabled()==TRUE and use V4Mapped addresses for ICE gathering.
|
||||
*/
|
||||
const char *server=lc->net_conf.stun_server;
|
||||
if (lc->sal && server){
|
||||
if (lc->sal && server && !lc->net_conf.stun_res){
|
||||
char host[NI_MAXHOST];
|
||||
int port=3478;
|
||||
linphone_parse_host_port(server,host,sizeof(host),&port);
|
||||
|
|
@ -1599,14 +1599,17 @@ static char * seperate_string_list(char **str) {
|
|||
}
|
||||
}
|
||||
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_key_agreements(LinphoneCore *lc, MSZrtpKeyAgreement keyAgreements[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char *config=strdup(lp_config_get_string(lc->config, "sip", "zrtp_key_agreements_suites", "MS_ZRTP_KEY_AGREEMENT_DH3K, MS_ZRTP_KEY_AGREEMENT_DH2K"));
|
||||
char *entry;
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_key_agreement_suites(LinphoneCore *lc, MSZrtpKeyAgreement keyAgreements[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char * zrtpConfig = (char*)lp_config_get_string(lc->config, "sip", "zrtp_key_agreements_suites", NULL);
|
||||
MsZrtpCryptoTypesCount key_agreements_count = 0;
|
||||
|
||||
if (config == NULL) return 0;
|
||||
|
||||
while ((entry = seperate_string_list(&config))) {
|
||||
char * entry, * origPtr;
|
||||
if (zrtpConfig == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
origPtr = strdup(zrtpConfig);
|
||||
zrtpConfig = origPtr;
|
||||
while ((entry = seperate_string_list(&zrtpConfig))) {
|
||||
const MSZrtpKeyAgreement agreement = ms_zrtp_key_agreement_from_string(entry);
|
||||
if (agreement != MS_ZRTP_KEY_AGREEMENT_INVALID) {
|
||||
ms_message("Configured zrtp key agreement: '%s'", ms_zrtp_key_agreement_to_string(agreement));
|
||||
|
|
@ -1614,9 +1617,97 @@ MsZrtpCryptoTypesCount linphone_core_get_zrtp_key_agreements(LinphoneCore *lc, M
|
|||
}
|
||||
}
|
||||
|
||||
free(origPtr);
|
||||
return key_agreements_count;
|
||||
}
|
||||
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_cipher_suites(LinphoneCore *lc, MSZrtpCipher ciphers[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char * zrtpConfig = (char*)lp_config_get_string(lc->config, "sip", "zrtp_cipher_suites", NULL);
|
||||
MsZrtpCryptoTypesCount cipher_count = 0;
|
||||
char * entry, * origPtr;
|
||||
if (zrtpConfig == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
origPtr = strdup(zrtpConfig);
|
||||
zrtpConfig = origPtr;
|
||||
while ((entry = seperate_string_list(&zrtpConfig))) {
|
||||
const MSZrtpCipher cipher = ms_zrtp_cipher_from_string(entry);
|
||||
if (cipher != MS_ZRTP_CIPHER_INVALID) {
|
||||
ms_message("Configured zrtp cipher: '%s'", ms_zrtp_cipher_to_string(cipher));
|
||||
ciphers[cipher_count++] = cipher;
|
||||
}
|
||||
}
|
||||
|
||||
free(origPtr);
|
||||
return cipher_count;
|
||||
}
|
||||
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_hash_suites(LinphoneCore *lc, MSZrtpHash hashes[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char * zrtpConfig = (char*)lp_config_get_string(lc->config, "sip", "zrtp_hash_suites", NULL);
|
||||
MsZrtpCryptoTypesCount hash_count = 0;
|
||||
char * entry, * origPtr;
|
||||
if (zrtpConfig == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
origPtr = strdup(zrtpConfig);
|
||||
zrtpConfig = origPtr;
|
||||
while ((entry = seperate_string_list(&zrtpConfig))) {
|
||||
const MSZrtpHash hash = ms_zrtp_hash_from_string(entry);
|
||||
if (hash != MS_ZRTP_HASH_INVALID) {
|
||||
ms_message("Configured zrtp hash: '%s'", ms_zrtp_hash_to_string(hash));
|
||||
hashes[hash_count++] = hash;
|
||||
}
|
||||
}
|
||||
|
||||
free(origPtr);
|
||||
return hash_count;
|
||||
}
|
||||
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_auth_suites(LinphoneCore *lc, MSZrtpAuthTag authTags[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char * zrtpConfig = (char*)lp_config_get_string(lc->config, "sip", "zrtp_auth_suites", NULL);
|
||||
MsZrtpCryptoTypesCount auth_tag_count = 0;
|
||||
char * entry, * origPtr;
|
||||
if (zrtpConfig == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
origPtr = strdup(zrtpConfig);
|
||||
zrtpConfig = origPtr;
|
||||
while ((entry = seperate_string_list(&zrtpConfig))) {
|
||||
const MSZrtpAuthTag authTag = ms_zrtp_auth_tag_from_string(entry);
|
||||
if (authTag != MS_ZRTP_AUTHTAG_INVALID) {
|
||||
ms_message("Configured zrtp auth tag: '%s'", ms_zrtp_auth_tag_to_string(authTag));
|
||||
authTags[auth_tag_count++] = authTag;
|
||||
}
|
||||
}
|
||||
|
||||
free(origPtr);
|
||||
return auth_tag_count;
|
||||
}
|
||||
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_sas_suites(LinphoneCore *lc, MSZrtpSasType sasTypes[MS_MAX_ZRTP_CRYPTO_TYPES]){
|
||||
char * zrtpConfig = (char*)lp_config_get_string(lc->config, "sip", "zrtp_sas_suites", NULL);
|
||||
MsZrtpCryptoTypesCount sas_count = 0;
|
||||
char * entry, * origPtr;
|
||||
if (zrtpConfig == NULL) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
origPtr = strdup(zrtpConfig);
|
||||
zrtpConfig = origPtr;
|
||||
while ((entry = seperate_string_list(&zrtpConfig))) {
|
||||
const MSZrtpSasType type = ms_zrtp_sas_type_from_string(entry);
|
||||
if (type != MS_ZRTP_SAS_INVALID) {
|
||||
ms_message("Configured zrtp SAS type: '%s'", ms_zrtp_sas_type_to_string(type));
|
||||
sasTypes[sas_count++] = type;
|
||||
}
|
||||
}
|
||||
|
||||
free(origPtr);
|
||||
return sas_count;
|
||||
}
|
||||
|
||||
const char ** linphone_core_get_supported_file_formats(LinphoneCore *core){
|
||||
static const char *mkv="mkv";
|
||||
|
|
|
|||
|
|
@ -110,6 +110,8 @@ struct _LinphoneCallParams{
|
|||
LinphonePrivacyMask privacy;
|
||||
LinphoneMediaDirection audio_dir;
|
||||
LinphoneMediaDirection video_dir;
|
||||
bool_t video_declined; /*use to keep traces of declined video to avoid to re-offer video in case of automatic RE-INVITE*/
|
||||
bool_t internal_call_update; /*use mark that call update was requested internally (might be by ice)*/
|
||||
|
||||
};
|
||||
|
||||
|
|
@ -281,6 +283,8 @@ struct _LinphoneCall{
|
|||
bool_t record_active;
|
||||
|
||||
bool_t paused_by_app;
|
||||
|
||||
MSWebCam *cam; /*webcam use for this call*/
|
||||
};
|
||||
|
||||
BELLE_SIP_DECLARE_VPTR(LinphoneCall);
|
||||
|
|
@ -438,6 +442,9 @@ void linphone_core_stop_waiting(LinphoneCore *lc);
|
|||
int linphone_core_proceed_with_invite_if_ready(LinphoneCore *lc, LinphoneCall *call, LinphoneProxyConfig *dest_proxy);
|
||||
int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, const LinphoneAddress* destination/* = NULL if to be taken from the call log */);
|
||||
int linphone_core_restart_invite(LinphoneCore *lc, LinphoneCall *call);
|
||||
/*
|
||||
* param automatic_offering aims is to take into account previous answer for video in case of automatic re-invite.
|
||||
* Purpose is to avoid to re-ask video previously declined */
|
||||
int linphone_core_start_update_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
int linphone_core_start_accept_call_update(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState next_state, const char *state_info);
|
||||
void linphone_core_notify_incoming_call(LinphoneCore *lc, LinphoneCall *call);
|
||||
|
|
@ -1050,7 +1057,11 @@ static MS2_INLINE bool_t payload_type_enabled(const PayloadType *pt) {
|
|||
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);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_key_agreements(LinphoneCore *lc, MSZrtpKeyAgreement keyAgreements[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_key_agreement_suites(LinphoneCore *lc, MSZrtpKeyAgreement keyAgreements[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_cipher_suites(LinphoneCore *lc, MSZrtpCipher ciphers[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_hash_suites(LinphoneCore *lc, MSZrtpHash hashes[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_auth_suites(LinphoneCore *lc, MSZrtpAuthTag authTags[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
MsZrtpCryptoTypesCount linphone_core_get_zrtp_sas_suites(LinphoneCore *lc, MSZrtpSasType sasTypes[MS_MAX_ZRTP_CRYPTO_TYPES]);
|
||||
|
||||
/** Belle Sip-based objects need unique ids
|
||||
*/
|
||||
|
|
@ -1165,7 +1176,10 @@ typedef struct _VTableReference VTableReference;
|
|||
void v_table_reference_destroy(VTableReference *ref);
|
||||
|
||||
void _linphone_core_add_listener(LinphoneCore *lc, LinphoneCoreVTable *vtable, bool_t autorelease);
|
||||
|
||||
#ifdef VIDEO_ENABLED
|
||||
MSWebCam *linphone_call_get_video_device(const LinphoneCall *call);
|
||||
MSWebCam *get_nowebcam_device();
|
||||
#endif
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -450,7 +450,7 @@ LinphoneAddress *guess_contact_for_register(LinphoneProxyConfig *obj){
|
|||
* unregister without moving the register_enable flag
|
||||
*/
|
||||
void _linphone_proxy_config_unregister(LinphoneProxyConfig *obj) {
|
||||
if (obj->state == LinphoneRegistrationOk) {
|
||||
if (obj->op && obj->state == LinphoneRegistrationOk) {
|
||||
sal_unregister(obj->op);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
11
gtk/chat.c
11
gtk/chat.c
|
|
@ -357,26 +357,19 @@ void display_history_message(GtkWidget *chat_view,MSList *messages,const Linphon
|
|||
}
|
||||
}
|
||||
|
||||
void linphone_gtk_chat_add_contact(const LinphoneAddress *addr){
|
||||
static void linphone_gtk_chat_add_contact(const LinphoneAddress *addr){
|
||||
LinphoneFriend *lf=NULL;
|
||||
LinphoneAddress *fixed_uri=NULL;
|
||||
gboolean show_presence=FALSE;
|
||||
char *uri=linphone_address_as_string(addr);
|
||||
|
||||
lf=linphone_friend_new_with_address(uri);
|
||||
ms_free(uri);
|
||||
|
||||
linphone_friend_set_inc_subscribe_policy(lf,LinphoneSPDeny);
|
||||
linphone_friend_set_inc_subscribe_policy(lf,LinphoneSPWait);
|
||||
linphone_friend_send_subscribe(lf,show_presence);
|
||||
|
||||
fixed_uri = linphone_core_interpret_url(linphone_gtk_get_core(),uri);
|
||||
if (fixed_uri==NULL){
|
||||
linphone_gtk_display_something(GTK_MESSAGE_WARNING,_("Invalid sip contact !"));
|
||||
return ;
|
||||
}
|
||||
linphone_friend_set_address(lf,addr);
|
||||
linphone_core_add_friend(linphone_gtk_get_core(),lf);
|
||||
linphone_address_destroy(fixed_uri);
|
||||
linphone_gtk_show_friends();
|
||||
}
|
||||
|
||||
|
|
|
|||
30
gtk/main.c
30
gtk/main.c
|
|
@ -92,7 +92,6 @@ static gint main_window_y=0;
|
|||
#endif
|
||||
static gboolean verbose=0;
|
||||
static gboolean quit_done=FALSE;
|
||||
static gboolean auto_answer = 0;
|
||||
static gchar * addr_to_call = NULL;
|
||||
static int start_option = START_LINPHONE;
|
||||
static gboolean no_video=FALSE;
|
||||
|
|
@ -139,7 +138,6 @@ static GOptionEntry linphone_options[]={
|
|||
LINPHONE_OPTION("no-video", '\0', G_OPTION_ARG_NONE, (gpointer)&no_video, N_("Start linphone with video disabled.")),
|
||||
LINPHONE_OPTION("iconified", '\0', G_OPTION_ARG_NONE, (gpointer)&iconified, N_("Start only in the system tray, do not show the main interface.")),
|
||||
LINPHONE_OPTION("call", 'c', G_OPTION_ARG_STRING, &addr_to_call, N_("address to call right now")),
|
||||
LINPHONE_OPTION("auto-answer", 'a', G_OPTION_ARG_NONE, (gpointer) & auto_answer, N_("if set automatically answer incoming calls")),
|
||||
LINPHONE_OPTION("workdir", '\0', G_OPTION_ARG_STRING, (gpointer) & workingdir, N_("Specifiy a working directory (should be the base of the installation, eg: c:\\Program Files\\Linphone)")),
|
||||
LINPHONE_OPTION("config", '\0', G_OPTION_ARG_FILENAME, (gpointer) &custom_config_file, N_("Configuration file")),
|
||||
LINPHONE_OPTION("run-audio-assistant", '\0', G_OPTION_ARG_NONE, (gpointer) &run_audio_assistant, N_("Run the audio assistant")),
|
||||
|
|
@ -345,8 +343,18 @@ static void linphone_gtk_configure_window(GtkWidget *w, const char *window_name)
|
|||
if (icon_path) {
|
||||
GdkPixbuf *pbuf=create_pixbuf(icon_path);
|
||||
if(pbuf != NULL) {
|
||||
gtk_window_set_icon(GTK_WINDOW(w),pbuf);
|
||||
GList *pbuf_list = NULL;
|
||||
GdkPixbuf *pbuf_16=gdk_pixbuf_scale_simple(pbuf, 16, 16, GDK_INTERP_BILINEAR);
|
||||
GdkPixbuf *pbuf_32=gdk_pixbuf_scale_simple(pbuf, 32, 32, GDK_INTERP_BILINEAR);
|
||||
pbuf_list = g_list_append(pbuf_list, pbuf);
|
||||
pbuf_list = g_list_append(pbuf_list, pbuf_16);
|
||||
pbuf_list = g_list_append(pbuf_list, pbuf_32);
|
||||
gtk_window_set_icon_list(GTK_WINDOW(w), pbuf_list);
|
||||
gtk_window_set_default_icon_list(pbuf_list);
|
||||
g_object_unref(G_OBJECT(pbuf_16));
|
||||
g_object_unref(G_OBJECT(pbuf_32));
|
||||
g_object_unref(G_OBJECT(pbuf));
|
||||
g_list_free(pbuf_list);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1375,9 +1383,10 @@ static void linphone_gtk_call_state_changed(LinphoneCore *lc, LinphoneCall *call
|
|||
linphone_gtk_create_in_call_view(call);
|
||||
linphone_gtk_in_call_view_set_incoming(call);
|
||||
linphone_gtk_status_icon_set_blinking(TRUE);
|
||||
if (auto_answer) {
|
||||
if (linphone_gtk_get_ui_config_int("auto_answer", 0)) {
|
||||
int delay = linphone_gtk_get_ui_config_int("auto_answer_delay", 2000);
|
||||
linphone_call_ref(call);
|
||||
g_timeout_add(2000,(GSourceFunc)linphone_gtk_auto_answer ,call);
|
||||
g_timeout_add(delay, (GSourceFunc)linphone_gtk_auto_answer, call);
|
||||
}
|
||||
break;
|
||||
case LinphoneCallResuming:
|
||||
|
|
@ -2101,8 +2110,11 @@ int main(int argc, char *argv[]){
|
|||
/*for pulseaudio:*/
|
||||
g_setenv("PULSE_PROP_media.role", "phone", TRUE);
|
||||
#endif
|
||||
|
||||
if ((lang=linphone_gtk_get_lang(config_file))!=NULL && lang[0]!='\0'){
|
||||
lang=linphone_gtk_get_lang(config_file);
|
||||
if (lang == NULL || lang[0]=='\0'){
|
||||
lang = getenv("LANG");
|
||||
}
|
||||
if (lang && lang[0]!='\0'){
|
||||
#ifdef WIN32
|
||||
char tmp[128];
|
||||
snprintf(tmp,sizeof(tmp),"LANG=%s",lang);
|
||||
|
|
@ -2235,6 +2247,10 @@ core_start:
|
|||
if (icon) gtk_status_icon_set_visible(icon,FALSE);
|
||||
#endif
|
||||
free(progpath);
|
||||
/*output a translated "hello" string to the terminal, which allows the builder to check that translations are working.*/
|
||||
if (selftest){
|
||||
printf(_("Hello\n"));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
294
gtk/main.ui
294
gtk/main.ui
|
|
@ -7,15 +7,10 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="add_image1">
|
||||
<object class="GtkImage" id="connect_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="add_image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="stock">gtk-connect</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="dummy_callee_frame">
|
||||
<property name="can_focus">False</property>
|
||||
|
|
@ -47,7 +42,6 @@
|
|||
<object class="GtkButton" id="conference_control">
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
@ -159,7 +153,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox11">
|
||||
<property name="visible">True</property>
|
||||
|
|
@ -235,7 +228,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
|
|
@ -262,7 +254,6 @@
|
|||
<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="toggled" handler="linphone_gtk_record_call_toggled" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -349,7 +340,7 @@
|
|||
<object class="GtkHBox" id="encryption_box">
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkImage" id="image121">
|
||||
<object class="GtkImage" id="dialog_authenticator_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-dialog-authentication</property>
|
||||
|
|
@ -391,7 +382,6 @@
|
|||
<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_auth_token_verified_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -483,7 +473,6 @@
|
|||
<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_answer_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -498,7 +487,6 @@
|
|||
<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_decline_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -524,7 +512,6 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Record this call to an audio file</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="toggled" handler="linphone_gtk_record_call_toggled" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -567,7 +554,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
</child>
|
||||
<child>
|
||||
|
|
@ -576,7 +562,6 @@
|
|||
<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_hold_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -590,7 +575,6 @@
|
|||
<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_mute_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -604,7 +588,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="top_attach">1</property>
|
||||
|
|
@ -617,7 +600,6 @@
|
|||
<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_terminate_call" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -633,7 +615,6 @@
|
|||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="left_attach">2</property>
|
||||
|
|
@ -711,121 +692,20 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-edit</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="edit_image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-edit</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="edit_image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-edit</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-info</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image10">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image11">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-clear</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image12">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-connect</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image13">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image14">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image15">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image16">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image17">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-missing-image</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image18">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-select-color</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image19">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-refresh</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image20">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image21">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="yalign">0.49000000953674316</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image3">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-home</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image5">
|
||||
<object class="GtkImage" id="execute_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-execute</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image6">
|
||||
<object class="GtkImage" id="home_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="stock">gtk-home</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image7">
|
||||
<object class="GtkImage" id="info_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image8">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="image9">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="stock">gtk-add</property>
|
||||
<property name="stock">gtk-info</property>
|
||||
</object>
|
||||
<object class="GtkListStore" id="model1">
|
||||
<columns>
|
||||
|
|
@ -880,6 +760,18 @@
|
|||
</row>
|
||||
</data>
|
||||
</object>
|
||||
<object class="GtkImage" id="properties_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="yalign">0.49000000953674316</property>
|
||||
<property name="stock">gtk-properties</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="remove_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Delete</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
</object>
|
||||
<object class="GtkWindow" id="main">
|
||||
<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>
|
||||
|
|
@ -898,7 +790,6 @@
|
|||
<object class="GtkMenuItem" id="options_menu">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">_Options</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="linphone_gtk_options_activate" swapped="no"/>
|
||||
|
|
@ -911,7 +802,6 @@
|
|||
<property name="label">gtk-preferences</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="linphone_gtk_show_parameters" swapped="no"/>
|
||||
|
|
@ -921,7 +811,6 @@
|
|||
<object class="GtkMenuItem" id="provisionning_item">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">Set configuration URI</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="activate" handler="linphone_gtk_set_configuration_uri" swapped="no"/>
|
||||
|
|
@ -931,7 +820,6 @@
|
|||
<object class="GtkImageMenuItem" id="disconnect_item">
|
||||
<property name="label">gtk-disconnect</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="linphone_gtk_logout_clicked" swapped="no"/>
|
||||
|
|
@ -947,7 +835,6 @@
|
|||
<object class="GtkCheckMenuItem" id="enable_video_item">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">Always start video</property>
|
||||
<property name="use_underline">True</property>
|
||||
<signal name="toggled" handler="linphone_gtk_enable_video" swapped="no"/>
|
||||
|
|
@ -957,7 +844,6 @@
|
|||
<object class="GtkCheckMenuItem" id="selfview_item">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">Enable self-view</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="active">True</property>
|
||||
|
|
@ -974,7 +860,6 @@
|
|||
<object class="GtkImageMenuItem" id="quit_item">
|
||||
<property name="label">gtk-quit</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="gtk_main_quit" swapped="no"/>
|
||||
|
|
@ -988,7 +873,6 @@
|
|||
<object class="GtkMenuItem" id="menuitem4">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="label" translatable="yes">_Help</property>
|
||||
<property name="use_underline">True</property>
|
||||
<child type="submenu">
|
||||
|
|
@ -1000,7 +884,6 @@
|
|||
<property name="label">gtk-about</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="use_stock">True</property>
|
||||
<signal name="activate" handler="linphone_gtk_show_about" swapped="no"/>
|
||||
|
|
@ -1011,8 +894,7 @@
|
|||
<property name="label" translatable="yes">Show debug window</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">image1</property>
|
||||
<property name="image">info_image</property>
|
||||
<property name="use_stock">False</property>
|
||||
<signal name="activate" handler="linphone_gtk_log_show" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1022,9 +904,8 @@
|
|||
<property name="label" translatable="yes">_Homepage</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image4</property>
|
||||
<property name="image">home_image</property>
|
||||
<property name="use_stock">False</property>
|
||||
<signal name="activate" handler="linphone_gtk_link_to_website" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1033,9 +914,8 @@
|
|||
<object class="GtkImageMenuItem" id="versioncheck_item">
|
||||
<property name="label" translatable="yes">Check _Updates</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="image">image5</property>
|
||||
<property name="image">execute_image</property>
|
||||
<property name="use_stock">False</property>
|
||||
<signal name="activate" handler="linphone_gtk_check_for_new_version" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1044,8 +924,7 @@
|
|||
<object class="GtkImageMenuItem" id="assistant_item">
|
||||
<property name="label" translatable="yes">Account assistant</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">image12</property>
|
||||
<property name="image">connect_image</property>
|
||||
<property name="use_stock">False</property>
|
||||
<signal name="activate" handler="linphone_gtk_show_assistant" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1055,8 +934,7 @@
|
|||
<property name="label" translatable="yes">Audio assistant</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">image21</property>
|
||||
<property name="image">properties_image</property>
|
||||
<property name="use_stock">False</property>
|
||||
<signal name="activate" handler="linphone_gtk_show_audio_assistant" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1148,7 +1026,6 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="tooltip_text" translatable="yes">Initiate a new call</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<signal name="clicked" handler="linphone_gtk_start_call" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1164,7 +1041,6 @@
|
|||
<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_start_call" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1180,7 +1056,6 @@
|
|||
<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_create_keypad" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1266,8 +1141,7 @@
|
|||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="resize_mode">immediate</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">add_image2</property>
|
||||
<property name="image">add_image</property>
|
||||
<property name="xalign">1</property>
|
||||
<signal name="clicked" handler="linphone_gtk_add_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1282,8 +1156,7 @@
|
|||
<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="image">edit_image2</property>
|
||||
<property name="image">edit_image</property>
|
||||
<signal name="clicked" handler="linphone_gtk_edit_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1297,8 +1170,7 @@
|
|||
<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="image">remove_image2</property>
|
||||
<property name="image">remove_image</property>
|
||||
<signal name="clicked" handler="linphone_gtk_remove_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1396,7 +1268,6 @@
|
|||
<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="relief">none</property>
|
||||
<signal name="clicked" handler="linphone_gtk_directory_search_button_clicked" swapped="no"/>
|
||||
<child>
|
||||
|
|
@ -1463,8 +1334,6 @@
|
|||
<property name="label" translatable="yes">Add contact</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="use_action_appearance">False</property>
|
||||
<property name="image">image20</property>
|
||||
<signal name="clicked" handler="linphone_gtk_add_contact" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1498,7 +1367,6 @@
|
|||
<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_clear_call_logs" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1597,18 +1465,44 @@
|
|||
<property name="label_xalign">0</property>
|
||||
<property name="shadow_type">none</property>
|
||||
<child>
|
||||
<object class="GtkComboBox" id="identities">
|
||||
<object class="GtkHBox" id="hbox2">
|
||||
<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="model">model3</property>
|
||||
<property name="active">0</property>
|
||||
<signal name="changed" handler="linphone_gtk_used_identity_changed" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
<object class="GtkComboBox" id="identities">
|
||||
<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="model">model3</property>
|
||||
<property name="active">0</property>
|
||||
<signal name="changed" handler="linphone_gtk_used_identity_changed" swapped="no"/>
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer3"/>
|
||||
<attributes>
|
||||
<attribute name="text">0</attribute>
|
||||
</attributes>
|
||||
</child>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="presence_button">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="receives_default">True</property>
|
||||
<property name="relief">none</property>
|
||||
<signal name="clicked" handler="linphone_gtk_my_presence_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">5</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
|
|
@ -1636,7 +1530,6 @@
|
|||
<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="relief">none</property>
|
||||
<signal name="clicked" handler="on_proxy_refresh_button_clicked" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1706,6 +1599,9 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="n_rows">5</property>
|
||||
<property name="n_columns">2</property>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="label8">
|
||||
<property name="visible">True</property>
|
||||
|
|
@ -1772,7 +1668,6 @@
|
|||
<property name="can_focus">False</property>
|
||||
<property name="model">model4</property>
|
||||
<property name="active">0</property>
|
||||
<!-- <signal name="changed" handler="linphone_gtk_internet_kind_changed" swapped="no"/> -->
|
||||
<child>
|
||||
<object class="GtkCellRendererText" id="renderer4"/>
|
||||
<attributes>
|
||||
|
|
@ -1793,7 +1688,6 @@
|
|||
<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>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
@ -1829,9 +1723,6 @@
|
|||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
|
|
@ -1862,7 +1753,6 @@
|
|||
<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_login_frame_connect_clicked" swapped="no"/>
|
||||
</object>
|
||||
|
|
@ -1909,64 +1799,18 @@
|
|||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkHBox" id="hbox4">
|
||||
<object class="GtkStatusbar" id="status_bar">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<child>
|
||||
<object class="GtkStatusbar" id="status_bar">
|
||||
<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="spacing">2</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">0</property>
|
||||
</packing>
|
||||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="presence_button">
|
||||
<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="relief">none</property>
|
||||
<signal name="clicked" handler="linphone_gtk_my_presence_clicked" swapped="no"/>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="padding">5</property>
|
||||
<property name="position">1</property>
|
||||
</packing>
|
||||
</child>
|
||||
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
|
||||
</object>
|
||||
<packing>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="position">2</property>
|
||||
</packing>
|
||||
</child>
|
||||
</object>
|
||||
</child>
|
||||
</object>
|
||||
<object class="GtkImage" id="remove_image">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Delete</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="remove_image1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Delete</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
</object>
|
||||
<object class="GtkImage" id="remove_image2">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">False</property>
|
||||
<property name="tooltip_text" translatable="yes">Delete</property>
|
||||
<property name="stock">gtk-remove</property>
|
||||
</object>
|
||||
</interface>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1582,6 +1582,9 @@ void linphone_gtk_show_parameters(void){
|
|||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb,"adaptive_rate_control")),
|
||||
linphone_core_adaptive_rate_control_enabled(lc));
|
||||
|
||||
/* CALL PARAMS CONFIG */
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(pb, "auto_answer_checkbox")), linphone_gtk_get_ui_config_int("auto_answer", 0));
|
||||
gtk_spin_button_set_value(GTK_SPIN_BUTTON(linphone_gtk_get_widget(pb, "auto_answer_delay_spinbutton")), linphone_gtk_get_ui_config_int("auto_answer_delay", 2000));
|
||||
|
||||
/* UI CONFIG */
|
||||
linphone_gtk_fill_langs(pb);
|
||||
|
|
@ -1770,3 +1773,13 @@ void linphone_gtk_dscp_edit_response(GtkWidget *dialog, guint response_id){
|
|||
}
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
||||
void linphone_gtk_enable_auto_answer(GtkToggleButton *checkbox, gpointer user_data) {
|
||||
gboolean auto_answer_enabled = gtk_toggle_button_get_active(checkbox);
|
||||
linphone_gtk_set_ui_config_int("auto_answer", auto_answer_enabled ? 1 : 0);
|
||||
}
|
||||
|
||||
void linphone_gtk_auto_answer_delay_changed(GtkSpinButton *spinbutton, gpointer user_data) {
|
||||
int delay = gtk_spin_button_get_value(spinbutton);
|
||||
linphone_gtk_set_ui_config_int("auto_answer_delay", delay);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -257,8 +257,6 @@ static GtkWidget *create_video_window(LinphoneCall *call){
|
|||
char *remote,*title;
|
||||
GtkWidget *video_window;
|
||||
const LinphoneAddress *addr;
|
||||
const char *icon_path=linphone_gtk_get_ui_config("icon",LINPHONE_ICON);
|
||||
GdkPixbuf *pbuf=create_pixbuf(icon_path);
|
||||
guint timeout;
|
||||
MSVideoSize vsize={MS_VIDEO_SIZE_CIF_W,MS_VIDEO_SIZE_CIF_H};
|
||||
GdkColor color;
|
||||
|
|
@ -270,9 +268,6 @@ static GtkWidget *create_video_window(LinphoneCall *call){
|
|||
ms_free(remote);
|
||||
gtk_window_set_title(GTK_WINDOW(video_window),title);
|
||||
g_free(title);
|
||||
if (pbuf){
|
||||
gtk_window_set_icon(GTK_WINDOW(video_window),pbuf);
|
||||
}
|
||||
gtk_window_resize(GTK_WINDOW(video_window),vsize.width,vsize.height);
|
||||
gdk_color_parse("black",&color);
|
||||
gtk_widget_modify_bg(video_window,GTK_STATE_NORMAL,&color);
|
||||
|
|
|
|||
|
|
@ -827,6 +827,10 @@ char* sal_op_get_public_uri(SalOp *sal);
|
|||
unsigned long sal_begin_background_task(const char *name, void (*max_time_reached)(void *), void *data);
|
||||
void sal_end_background_task(unsigned long id);
|
||||
|
||||
/*Some old equipment may not only rely on attribute sendonly/recvonly/sendrecv/inative*/
|
||||
void sal_op_cnx_ip_to_0000_if_sendonly_enable(SalOp *sal,bool_t yesno);
|
||||
bool_t sal_op_cnx_ip_to_0000_if_sendonly_enabled(SalOp *sal);
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -133,4 +133,16 @@ public interface LinphoneFriend {
|
|||
* Return the native pointer for this object
|
||||
*/
|
||||
long getNativePtr();
|
||||
|
||||
/**
|
||||
* Set the reference key of a friend.
|
||||
* @param key The reference key to use for the friend.
|
||||
**/
|
||||
void setRefKey(String key);
|
||||
|
||||
/**
|
||||
* Get the reference key of a friend.
|
||||
* @return The reference key of the friend.
|
||||
**/
|
||||
String getRefKey();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,8 @@ class LinphoneFriendImpl implements LinphoneFriend, Serializable {
|
|||
private native void done(long nativePtr);
|
||||
private native void delete(long ptr);
|
||||
private native Object getCore(long ptr);
|
||||
private native void setRefKey(long nativePtr, String key);
|
||||
private native String getRefKey(long nativePtr);
|
||||
|
||||
boolean ownPtr = false;
|
||||
protected LinphoneFriendImpl() {
|
||||
|
|
@ -103,4 +105,14 @@ class LinphoneFriendImpl implements LinphoneFriend, Serializable {
|
|||
if (core!=null) return core;
|
||||
else return this;
|
||||
}
|
||||
|
||||
public void setRefKey(String key){
|
||||
synchronized(getSyncObject()){
|
||||
setRefKey(nativePtr,key);
|
||||
}
|
||||
}
|
||||
|
||||
public String getRefKey(){
|
||||
return getRefKey(nativePtr);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ over the internet. It has a gtk+ and console interface.
|
|||
Summary: Development libraries for linphone
|
||||
Group: Development/Libraries
|
||||
Requires: %{name} = %{version}-%{release}
|
||||
Requires: ortp-devel = @ORTP_VERSION@
|
||||
Requires: ortp-devel = 1:@ORTP_VERSION@
|
||||
Requires: mediastreamer-devel = @MS2_VERSION@
|
||||
Requires: glib2-devel
|
||||
|
||||
|
|
@ -60,7 +60,6 @@ Libraries and headers required to develop software with linphone.
|
|||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
make install DESTDIR=$RPM_BUILD_ROOT
|
||||
install -p -m 0644 pixmaps/linphone.png $RPM_BUILD_ROOT%{_datadir}/pixmaps
|
||||
%find_lang %{name}
|
||||
desktop-file-install \
|
||||
--delete-original \
|
||||
|
|
@ -88,7 +87,7 @@ rm -rf $RPM_BUILD_ROOT
|
|||
%{_datadir}/applications/audio-assistant.desktop
|
||||
%{_datadir}/pixmaps/linphone
|
||||
%{_datadir}/linphone
|
||||
%{_datadir}/pixmaps/linphone.png
|
||||
%{_datadir}/icons/*
|
||||
%{_datadir}/sounds/linphone
|
||||
%{_datadir}/appdata/linphone.appdata.xml
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,6 @@ set(PIXMAPS
|
|||
hold_on.png
|
||||
linphone-banner.png
|
||||
linphone.icns
|
||||
linphone.png
|
||||
mic_active.png
|
||||
mic_muted.png
|
||||
notok.png
|
||||
|
|
@ -62,3 +61,8 @@ install(FILES ${PIXMAPS}
|
|||
DESTINATION ${PACKAGE_DATA_DIR}/pixmaps/linphone
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||
)
|
||||
|
||||
install(FILES linphone.png
|
||||
DESTINATION ${PACKAGE_DATA_DIR}/icons/hicolor/48x48/apps
|
||||
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,25 +1,29 @@
|
|||
|
||||
|
||||
pixmapdir=$(datadir)/pixmaps/linphone
|
||||
|
||||
pixmap_DATA= \
|
||||
hold_on.png hold_off.png \
|
||||
mic_muted.png mic_active.png \
|
||||
linphone.png linphone-banner.png \
|
||||
status-green.png \
|
||||
status-orange.png \
|
||||
status-red.png \
|
||||
status-offline.png \
|
||||
call.png \
|
||||
chat.png active_chat.png composing_chat.png composing_active_chat.png\
|
||||
chat_message_inprogress.png chat_message_delivered.png chat_message_not_delivered.png\
|
||||
contact-orange.png dialer-orange.png history-orange.png\
|
||||
startcall-green.png startcall-small.png stopcall-red.png stopcall-small.png addcall-green.png linphone.icns \
|
||||
contact_starred.png contact_unstarred.png \
|
||||
speaker.png \
|
||||
call_status_incoming.png call_status_outgoing.png \
|
||||
ok.png \
|
||||
dialer.png \
|
||||
notok.png
|
||||
hold_on.png hold_off.png \
|
||||
mic_muted.png mic_active.png \
|
||||
linphone.png linphone-banner.png \
|
||||
status-green.png \
|
||||
status-orange.png \
|
||||
status-red.png \
|
||||
status-offline.png \
|
||||
call.png \
|
||||
chat.png active_chat.png composing_chat.png composing_active_chat.png\
|
||||
chat_message_inprogress.png chat_message_delivered.png chat_message_not_delivered.png\
|
||||
contact-orange.png dialer-orange.png history-orange.png\
|
||||
startcall-green.png startcall-small.png stopcall-red.png stopcall-small.png addcall-green.png linphone.icns \
|
||||
contact_starred.png contact_unstarred.png \
|
||||
speaker.png \
|
||||
call_status_incoming.png call_status_outgoing.png \
|
||||
ok.png \
|
||||
dialer.png \
|
||||
notok.png
|
||||
|
||||
EXTRA_DIST=$(pixmap_DATA)
|
||||
|
||||
iconsdir=$(datadir)/icons/hicolor/48x48/apps
|
||||
|
||||
icons_DATA= linphone.png
|
||||
|
||||
|
||||
EXTRA_DIST=$(pixmap_DATA) $(icons_DATA)
|
||||
|
|
|
|||
Binary file not shown.
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
448
po/nb_NO.po
448
po/nb_NO.po
File diff suppressed because it is too large
Load diff
419
po/pl.po
419
po/pl.po
|
|
@ -1,24 +1,21 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: linphone-gtk\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-03-11 16:26+0100\n"
|
||||
"PO-Revision-Date: 2015-02-17 11:28+0000\n"
|
||||
"Last-Translator: Belledonne Communications <support@belledonne-"
|
||||
"communications.com>\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/"
|
||||
"language/pl/)\n"
|
||||
"Language: pl\n"
|
||||
"POT-Creation-Date: 2015-03-27 14:40+0100\n"
|
||||
"PO-Revision-Date: 2015-03-27 13:40+0000\n"
|
||||
"Last-Translator: Belledonne Communications <support@belledonne-communications.com>\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/language/pl/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||
"|| n%100>=20) ? 1 : 2);\n"
|
||||
"Language: pl\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
|
||||
#: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974
|
||||
#, c-format
|
||||
|
|
@ -92,130 +89,126 @@ msgstr ""
|
|||
msgid "Couldn't find pixmap file: %s"
|
||||
msgstr "Nie można znaleźć pixmapy: %s"
|
||||
|
||||
#: ../gtk/chat.c:374 ../gtk/friendlist.c:924
|
||||
msgid "Invalid sip contact !"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:137
|
||||
#: ../gtk/main.c:136
|
||||
msgid "log to stdout some debug information while running."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:138
|
||||
#: ../gtk/main.c:137
|
||||
msgid "path to a file to write logs into."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:139
|
||||
#: ../gtk/main.c:138
|
||||
msgid "Start linphone with video disabled."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:140
|
||||
#: ../gtk/main.c:139
|
||||
msgid "Start only in the system tray, do not show the main interface."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:141
|
||||
#: ../gtk/main.c:140
|
||||
msgid "address to call right now"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:142
|
||||
msgid "if set automatically answer incoming calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:143
|
||||
#: ../gtk/main.c:141
|
||||
msgid ""
|
||||
"Specifiy a working directory (should be the base of the installation, eg: c:"
|
||||
"\\Program Files\\Linphone)"
|
||||
"Specifiy a working directory (should be the base of the installation, eg: "
|
||||
"c:\\Program Files\\Linphone)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:144
|
||||
#: ../gtk/main.c:142
|
||||
msgid "Configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:145
|
||||
#: ../gtk/main.c:143
|
||||
msgid "Run the audio assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:146
|
||||
#: ../gtk/main.c:144
|
||||
msgid "Run self test and exit 0 if succeed"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1061
|
||||
#: ../gtk/main.c:1059
|
||||
#, 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 ""
|
||||
|
||||
#: ../gtk/main.c:1138
|
||||
#: ../gtk/main.c:1136
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Please enter your password for username <i>%s</i>\n"
|
||||
" at realm <i>%s</i>:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1259
|
||||
#: ../gtk/main.c:1257
|
||||
msgid "Call error"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1262 ../coreapi/linphonecore.c:3791
|
||||
#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826
|
||||
msgid "Call ended"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1265 ../coreapi/call_log.c:221
|
||||
#: ../gtk/main.c:1263 ../coreapi/call_log.c:221
|
||||
msgid "Incoming call"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1267 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
|
||||
#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
|
||||
msgid "Answer"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1269 ../gtk/main.ui.h:6
|
||||
#: ../gtk/main.c:1267 ../gtk/main.ui.h:6
|
||||
msgid "Decline"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1275
|
||||
#: ../gtk/main.c:1273
|
||||
msgid "Call paused"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1275
|
||||
#: ../gtk/main.c:1273
|
||||
#, c-format
|
||||
msgid "<b>by %s</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1345
|
||||
#: ../gtk/main.c:1343
|
||||
#, c-format
|
||||
msgid "%s proposed to start video. Do you accept ?"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1507
|
||||
#: ../gtk/main.c:1505
|
||||
msgid "Website link"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1556
|
||||
#: ../gtk/main.c:1554
|
||||
msgid "Linphone - a video internet phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1648
|
||||
#: ../gtk/main.c:1646
|
||||
#, c-format
|
||||
msgid "%s (Default)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1980 ../coreapi/callbacks.c:1045
|
||||
#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057
|
||||
#, c-format
|
||||
msgid "We are transferred to %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1990
|
||||
#: ../gtk/main.c:1988
|
||||
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:2135
|
||||
#: ../gtk/main.c:2136
|
||||
msgid "A free SIP video-phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:2241
|
||||
#, c-format
|
||||
msgid "Hello\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:505
|
||||
msgid "Add to addressbook"
|
||||
msgstr ""
|
||||
|
|
@ -241,6 +234,10 @@ msgstr ""
|
|||
msgid "Search in %s directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:924
|
||||
msgid "Invalid sip contact !"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:976
|
||||
#, c-format
|
||||
msgid "Edit contact '%s'"
|
||||
|
|
@ -281,7 +278,7 @@ msgstr "Parametr"
|
|||
msgid "Enabled"
|
||||
msgstr "Włączone"
|
||||
|
||||
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
|
||||
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17
|
||||
msgid "Disabled"
|
||||
msgstr "Wyłączone"
|
||||
|
||||
|
|
@ -447,7 +444,7 @@ msgstr ""
|
|||
msgid "Enter your linphone.org username"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
|
||||
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4
|
||||
msgid "Username:"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -511,8 +508,7 @@ 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 ""
|
||||
|
||||
|
|
@ -836,7 +832,7 @@ msgstr ""
|
|||
msgid "Audio Assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:31
|
||||
#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32
|
||||
msgid "Audio assistant"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -913,103 +909,103 @@ msgid "Default"
|
|||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:22
|
||||
msgid "_Options"
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:23
|
||||
msgid "Set configuration URI"
|
||||
msgid "_Options"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:24
|
||||
msgid "Always start video"
|
||||
msgid "Set configuration URI"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:25
|
||||
msgid "Enable self-view"
|
||||
msgid "Always start video"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:26
|
||||
msgid "_Help"
|
||||
msgid "Enable self-view"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:27
|
||||
msgid "Show debug window"
|
||||
msgid "_Help"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:28
|
||||
msgid "_Homepage"
|
||||
msgid "Show debug window"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:29
|
||||
msgid "Check _Updates"
|
||||
msgid "_Homepage"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:30
|
||||
msgid "Check _Updates"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:31
|
||||
msgid "Account assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:32
|
||||
#: ../gtk/main.ui.h:33
|
||||
msgid "SIP address or phone number:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:33
|
||||
#: ../gtk/main.ui.h:34
|
||||
msgid "Initiate a new call"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:34
|
||||
#: ../gtk/main.ui.h:35
|
||||
msgid "Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:35
|
||||
#: ../gtk/main.ui.h:36
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:36
|
||||
#: ../gtk/main.ui.h:37
|
||||
msgid "<b>Add contacts from directory</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:37
|
||||
#: ../gtk/main.ui.h:38
|
||||
msgid "Add contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:38
|
||||
#: ../gtk/main.ui.h:39
|
||||
msgid "Recent calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:39
|
||||
#: ../gtk/main.ui.h:40
|
||||
msgid "My current identity:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7
|
||||
#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8
|
||||
#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:42
|
||||
#: ../gtk/main.ui.h:43
|
||||
msgid "Internet connection:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:43
|
||||
#: ../gtk/main.ui.h:44
|
||||
msgid "Automatically log me in"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3
|
||||
#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3
|
||||
msgid "UserID"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:45
|
||||
#: ../gtk/main.ui.h:46
|
||||
msgid "Login information"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:46
|
||||
msgid "<b>Welcome!</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:47
|
||||
msgid "Delete"
|
||||
msgid "<b>Welcome!</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/about.ui.h:1
|
||||
|
|
@ -1185,299 +1181,307 @@ msgid "C"
|
|||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:11
|
||||
msgid "SIP (UDP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:12
|
||||
msgid "SIP (TCP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:13
|
||||
msgid "SIP (TLS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:14
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:15
|
||||
#: ../gtk/parameters.ui.h:12
|
||||
msgid "Set Maximum Transmission Unit:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:16
|
||||
#: ../gtk/parameters.ui.h:13
|
||||
msgid "Send DTMFs as SIP info"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:17
|
||||
msgid "Use IPv6 instead of IPv4"
|
||||
#: ../gtk/parameters.ui.h:14
|
||||
msgid "Allow IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:18
|
||||
#: ../gtk/parameters.ui.h:15
|
||||
msgid "<b>Transport</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:19
|
||||
#: ../gtk/parameters.ui.h:16
|
||||
msgid "SIP/UDP port"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:21
|
||||
#: ../gtk/parameters.ui.h:18
|
||||
msgid "Random"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:22
|
||||
#: ../gtk/parameters.ui.h:19
|
||||
msgid "SIP/TCP port"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:23
|
||||
#: ../gtk/parameters.ui.h:20
|
||||
msgid "Audio RTP/UDP:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:24
|
||||
#: ../gtk/parameters.ui.h:21
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:25
|
||||
#: ../gtk/parameters.ui.h:22
|
||||
msgid "Video RTP/UDP:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:26
|
||||
#: ../gtk/parameters.ui.h:23
|
||||
msgid "Media encryption type"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:27
|
||||
#: ../gtk/parameters.ui.h:24
|
||||
msgid "Media encryption is mandatory"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:28
|
||||
#: ../gtk/parameters.ui.h:25
|
||||
msgid "Tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:29
|
||||
#: ../gtk/parameters.ui.h:26
|
||||
msgid "DSCP fields"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:30
|
||||
#: ../gtk/parameters.ui.h:27
|
||||
msgid "<b>Network protocol and ports</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:31
|
||||
#: ../gtk/parameters.ui.h:28
|
||||
msgid "Direct connection to the Internet"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:32
|
||||
#: ../gtk/parameters.ui.h:29
|
||||
msgid "Behind NAT / Firewall (specify gateway IP )"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:33
|
||||
#: ../gtk/parameters.ui.h:30
|
||||
msgid "Behind NAT / Firewall (use STUN to resolve)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:34
|
||||
#: ../gtk/parameters.ui.h:31
|
||||
msgid "Behind NAT / Firewall (use ICE)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:35
|
||||
#: ../gtk/parameters.ui.h:32
|
||||
msgid "Behind NAT / Firewall (use uPnP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:36
|
||||
#: ../gtk/parameters.ui.h:33
|
||||
msgid "Public IP address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:37
|
||||
#: ../gtk/parameters.ui.h:34
|
||||
msgid "Stun server:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:38
|
||||
#: ../gtk/parameters.ui.h:35
|
||||
msgid "<b>NAT and Firewall</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:39
|
||||
#: ../gtk/parameters.ui.h:36
|
||||
msgid "Network settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:40
|
||||
#: ../gtk/parameters.ui.h:37
|
||||
msgid "Ring sound:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:41
|
||||
#: ../gtk/parameters.ui.h:38
|
||||
msgid "ALSA special device (optional):"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:42
|
||||
#: ../gtk/parameters.ui.h:39
|
||||
msgid "Capture device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:43
|
||||
#: ../gtk/parameters.ui.h:40
|
||||
msgid "Ring device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:44
|
||||
#: ../gtk/parameters.ui.h:41
|
||||
msgid "Playback device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:45
|
||||
#: ../gtk/parameters.ui.h:42
|
||||
msgid "Enable echo cancellation"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:46
|
||||
#: ../gtk/parameters.ui.h:43
|
||||
msgid "<b>Audio</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:47
|
||||
#: ../gtk/parameters.ui.h:44
|
||||
msgid "Video input device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:48
|
||||
#: ../gtk/parameters.ui.h:45
|
||||
msgid "Prefered video resolution:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:49
|
||||
#: ../gtk/parameters.ui.h:46
|
||||
msgid "Video output method:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:50
|
||||
#: ../gtk/parameters.ui.h:47
|
||||
msgid "Show camera preview"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:51
|
||||
#: ../gtk/parameters.ui.h:48
|
||||
msgid "<b>Video</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:52
|
||||
#: ../gtk/parameters.ui.h:49
|
||||
msgid "Multimedia settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:53
|
||||
#: ../gtk/parameters.ui.h:50
|
||||
msgid "This section defines your SIP address when not using a SIP account"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:54
|
||||
#: ../gtk/parameters.ui.h:51
|
||||
msgid "Your display name (eg: John Doe):"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:55
|
||||
#: ../gtk/parameters.ui.h:52
|
||||
msgid "Your username:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:56
|
||||
#: ../gtk/parameters.ui.h:53
|
||||
msgid "Your resulting SIP address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:57
|
||||
#: ../gtk/parameters.ui.h:54
|
||||
msgid "<b>Default identity</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:58
|
||||
#: ../gtk/parameters.ui.h:55
|
||||
msgid "Wizard"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:59
|
||||
#: ../gtk/parameters.ui.h:56
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:60
|
||||
#: ../gtk/parameters.ui.h:57
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:61
|
||||
#: ../gtk/parameters.ui.h:58
|
||||
msgid "Remove"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:62
|
||||
#: ../gtk/parameters.ui.h:59
|
||||
msgid "<b>Proxy accounts</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:63
|
||||
#: ../gtk/parameters.ui.h:60
|
||||
msgid "Erase all passwords"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:64
|
||||
#: ../gtk/parameters.ui.h:61
|
||||
msgid "<b>Privacy</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:65
|
||||
#: ../gtk/parameters.ui.h:62
|
||||
msgid "Automatically answer when a call is received"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:63
|
||||
msgid "<b>Auto-answer</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:64
|
||||
msgid "Manage SIP Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
|
||||
#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4
|
||||
msgid "Enable"
|
||||
msgstr "Włączony"
|
||||
|
||||
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
|
||||
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5
|
||||
msgid "Disable"
|
||||
msgstr "Wyłącz"
|
||||
|
||||
#: ../gtk/parameters.ui.h:68
|
||||
#: ../gtk/parameters.ui.h:67
|
||||
msgid "<b>Codecs</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:69
|
||||
#: ../gtk/parameters.ui.h:68
|
||||
msgid "0 stands for \"unlimited\""
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:70
|
||||
#: ../gtk/parameters.ui.h:69
|
||||
msgid "Upload speed limit in Kbit/sec:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:71
|
||||
#: ../gtk/parameters.ui.h:70
|
||||
msgid "Download speed limit in Kbit/sec:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:72
|
||||
#: ../gtk/parameters.ui.h:71
|
||||
msgid "Enable adaptive rate control"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:73
|
||||
#: ../gtk/parameters.ui.h:72
|
||||
msgid ""
|
||||
"<i>Adaptive rate control is a technique to dynamically guess the available "
|
||||
"bandwidth during a call.</i>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:74
|
||||
#: ../gtk/parameters.ui.h:73
|
||||
msgid "<b>Bandwidth control</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:75
|
||||
#: ../gtk/parameters.ui.h:74
|
||||
msgid "Codecs"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:76
|
||||
#: ../gtk/parameters.ui.h:75
|
||||
msgid "<b>Language</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:77
|
||||
#: ../gtk/parameters.ui.h:76
|
||||
msgid "Show advanced settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:78
|
||||
#: ../gtk/parameters.ui.h:77
|
||||
msgid "<b>Level</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:79
|
||||
#: ../gtk/parameters.ui.h:78
|
||||
msgid "User interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
|
||||
#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2
|
||||
msgid "Server address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
|
||||
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3
|
||||
msgid "Authentication method:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:83
|
||||
#: ../gtk/parameters.ui.h:82
|
||||
msgid "<b>LDAP Account setup</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:84
|
||||
#: ../gtk/parameters.ui.h:83
|
||||
msgid "LDAP"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:85
|
||||
#: ../gtk/parameters.ui.h:84
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:85
|
||||
msgid "SIP (UDP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:86
|
||||
msgid "SIP (TCP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:87
|
||||
msgid "SIP (TLS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/buddylookup.ui.h:1
|
||||
msgid "Search contacts in directory"
|
||||
msgstr ""
|
||||
|
|
@ -1681,11 +1685,8 @@ msgstr ""
|
|||
|
||||
#: ../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. "
|
||||
"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 ""
|
||||
|
||||
#: ../gtk/provisioning-fetch.ui.h:1
|
||||
|
|
@ -1696,60 +1697,60 @@ msgstr ""
|
|||
msgid "Please wait while fetching configuration from server..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:1512
|
||||
#: ../coreapi/linphonecore.c:1534
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2499
|
||||
#: ../coreapi/linphonecore.c:2534
|
||||
msgid "Configuring"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2673
|
||||
#: ../coreapi/linphonecore.c:2708
|
||||
msgid "Looking for telephone number destination..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2675
|
||||
#: ../coreapi/linphonecore.c:2710
|
||||
msgid "Could not resolve this number."
|
||||
msgstr ""
|
||||
|
||||
#. must be known at that time
|
||||
#: ../coreapi/linphonecore.c:2961
|
||||
#: ../coreapi/linphonecore.c:2996
|
||||
msgid "Contacting"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2966
|
||||
#: ../coreapi/linphonecore.c:3001
|
||||
msgid "Could not call"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3116
|
||||
#: ../coreapi/linphonecore.c:3152
|
||||
msgid "Sorry, we have reached the maximum number of simultaneous calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3274
|
||||
#: ../coreapi/linphonecore.c:3310
|
||||
msgid "is contacting you"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3275
|
||||
#: ../coreapi/linphonecore.c:3311
|
||||
msgid " and asked autoanswer."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3399
|
||||
#: ../coreapi/linphonecore.c:3435
|
||||
msgid "Modifying call parameters..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3747
|
||||
#: ../coreapi/linphonecore.c:3782
|
||||
msgid "Connected."
|
||||
msgstr "Połączony"
|
||||
|
||||
#: ../coreapi/linphonecore.c:3772
|
||||
#: ../coreapi/linphonecore.c:3807
|
||||
msgid "Call aborted"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3962
|
||||
#: ../coreapi/linphonecore.c:3997
|
||||
msgid "Could not pause the call"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3965
|
||||
#: ../coreapi/linphonecore.c:4000
|
||||
msgid "Pausing the current call..."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1825,117 +1826,117 @@ msgid ""
|
|||
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/proxy.c:1403
|
||||
#: ../coreapi/proxy.c:1416
|
||||
#, c-format
|
||||
msgid "Could not login as %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:419
|
||||
#: ../coreapi/callbacks.c:428
|
||||
msgid "Remote ringing."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:431
|
||||
#: ../coreapi/callbacks.c:440
|
||||
msgid "Remote ringing..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:448
|
||||
#: ../coreapi/callbacks.c:461
|
||||
msgid "Early media."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:521
|
||||
#: ../coreapi/callbacks.c:533
|
||||
#, c-format
|
||||
msgid "Call with %s is paused."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:534
|
||||
#: ../coreapi/callbacks.c:546
|
||||
#, c-format
|
||||
msgid "Call answered by %s - on hold."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:544
|
||||
#: ../coreapi/callbacks.c:556
|
||||
msgid "Call resumed."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:548
|
||||
#: ../coreapi/callbacks.c:560
|
||||
#, c-format
|
||||
msgid "Call answered by %s."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:571
|
||||
#: ../coreapi/callbacks.c:583
|
||||
msgid "Incompatible, check codecs or security settings..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:576 ../coreapi/callbacks.c:888
|
||||
#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900
|
||||
msgid "Incompatible media parameters."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:606
|
||||
#: ../coreapi/callbacks.c:618
|
||||
msgid "We have been resumed."
|
||||
msgstr ""
|
||||
|
||||
#. we are being paused
|
||||
#: ../coreapi/callbacks.c:614
|
||||
#: ../coreapi/callbacks.c:626
|
||||
msgid "We are paused by other party."
|
||||
msgstr ""
|
||||
|
||||
#. reINVITE and in-dialogs UPDATE go here
|
||||
#: ../coreapi/callbacks.c:648
|
||||
#: ../coreapi/callbacks.c:660
|
||||
msgid "Call is updated by remote."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:764
|
||||
#: ../coreapi/callbacks.c:776
|
||||
msgid "Call terminated."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:792
|
||||
#: ../coreapi/callbacks.c:804
|
||||
msgid "User is busy."
|
||||
msgstr "Osoba jest zajęta."
|
||||
|
||||
#: ../coreapi/callbacks.c:793
|
||||
#: ../coreapi/callbacks.c:805
|
||||
msgid "User is temporarily unavailable."
|
||||
msgstr "Osoba jest tymczasowo niedostępna."
|
||||
|
||||
#. char *retrymsg=_("%s. Retry after %i minute(s).");
|
||||
#: ../coreapi/callbacks.c:795
|
||||
#: ../coreapi/callbacks.c:807
|
||||
msgid "User does not want to be disturbed."
|
||||
msgstr "Osoba nie chce, aby jej przeszkadzać."
|
||||
|
||||
#: ../coreapi/callbacks.c:796
|
||||
#: ../coreapi/callbacks.c:808
|
||||
msgid "Call declined."
|
||||
msgstr "Rozmowa odrzucona."
|
||||
|
||||
#: ../coreapi/callbacks.c:811
|
||||
#: ../coreapi/callbacks.c:823
|
||||
msgid "Request timeout."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:842
|
||||
#: ../coreapi/callbacks.c:854
|
||||
msgid "Redirected"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:897
|
||||
#: ../coreapi/callbacks.c:909
|
||||
msgid "Call failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:975
|
||||
#: ../coreapi/callbacks.c:987
|
||||
#, c-format
|
||||
msgid "Registration on %s successful."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:976
|
||||
#: ../coreapi/callbacks.c:988
|
||||
#, c-format
|
||||
msgid "Unregistration on %s done."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:994
|
||||
#: ../coreapi/callbacks.c:1006
|
||||
msgid "no response timeout"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:997
|
||||
#: ../coreapi/callbacks.c:1009
|
||||
#, c-format
|
||||
msgid "Registration on %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:1004
|
||||
#: ../coreapi/callbacks.c:1016
|
||||
msgid "Service unavailable, retrying"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1945,7 +1946,11 @@ msgstr ""
|
|||
msgid "Authentication token is %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecall.c:3600
|
||||
#: ../coreapi/linphonecall.c:1305
|
||||
msgid "Call parameters were successfully modified."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecall.c:3659
|
||||
#, c-format
|
||||
msgid "You have missed %i call."
|
||||
msgid_plural "You have missed %i calls."
|
||||
|
|
|
|||
416
po/pt_BR.po
416
po/pt_BR.po
|
|
@ -1,22 +1,20 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: linphone-gtk\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2015-03-11 16:26+0100\n"
|
||||
"PO-Revision-Date: 2015-02-17 11:28+0000\n"
|
||||
"Last-Translator: Belledonne Communications <support@belledonne-"
|
||||
"communications.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/"
|
||||
"linphone-gtk/language/pt_BR/)\n"
|
||||
"Language: pt_BR\n"
|
||||
"POT-Creation-Date: 2015-03-27 14:40+0100\n"
|
||||
"PO-Revision-Date: 2015-03-27 13:40+0000\n"
|
||||
"Last-Translator: Belledonne Communications <support@belledonne-communications.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/linphone-gtk/language/pt_BR/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pt_BR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974
|
||||
|
|
@ -89,130 +87,126 @@ msgstr ""
|
|||
msgid "Couldn't find pixmap file: %s"
|
||||
msgstr "Não é possível achar arquivo pixmap: %s"
|
||||
|
||||
#: ../gtk/chat.c:374 ../gtk/friendlist.c:924
|
||||
msgid "Invalid sip contact !"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:137
|
||||
#: ../gtk/main.c:136
|
||||
msgid "log to stdout some debug information while running."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:138
|
||||
#: ../gtk/main.c:137
|
||||
msgid "path to a file to write logs into."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:139
|
||||
#: ../gtk/main.c:138
|
||||
msgid "Start linphone with video disabled."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:140
|
||||
#: ../gtk/main.c:139
|
||||
msgid "Start only in the system tray, do not show the main interface."
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:141
|
||||
#: ../gtk/main.c:140
|
||||
msgid "address to call right now"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:142
|
||||
msgid "if set automatically answer incoming calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:143
|
||||
#: ../gtk/main.c:141
|
||||
msgid ""
|
||||
"Specifiy a working directory (should be the base of the installation, eg: c:"
|
||||
"\\Program Files\\Linphone)"
|
||||
"Specifiy a working directory (should be the base of the installation, eg: "
|
||||
"c:\\Program Files\\Linphone)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:144
|
||||
#: ../gtk/main.c:142
|
||||
msgid "Configuration file"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:145
|
||||
#: ../gtk/main.c:143
|
||||
msgid "Run the audio assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:146
|
||||
#: ../gtk/main.c:144
|
||||
msgid "Run self test and exit 0 if succeed"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1061
|
||||
#: ../gtk/main.c:1059
|
||||
#, 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 ""
|
||||
|
||||
#: ../gtk/main.c:1138
|
||||
#: ../gtk/main.c:1136
|
||||
#, c-format
|
||||
msgid ""
|
||||
"Please enter your password for username <i>%s</i>\n"
|
||||
" at realm <i>%s</i>:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1259
|
||||
#: ../gtk/main.c:1257
|
||||
msgid "Call error"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1262 ../coreapi/linphonecore.c:3791
|
||||
#: ../gtk/main.c:1260 ../coreapi/linphonecore.c:3826
|
||||
msgid "Call ended"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1265 ../coreapi/call_log.c:221
|
||||
#: ../gtk/main.c:1263 ../coreapi/call_log.c:221
|
||||
msgid "Incoming call"
|
||||
msgstr "Camadas recebidas"
|
||||
|
||||
#: ../gtk/main.c:1267 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
|
||||
#: ../gtk/main.c:1265 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5
|
||||
msgid "Answer"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1269 ../gtk/main.ui.h:6
|
||||
#: ../gtk/main.c:1267 ../gtk/main.ui.h:6
|
||||
msgid "Decline"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1275
|
||||
#: ../gtk/main.c:1273
|
||||
msgid "Call paused"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1275
|
||||
#: ../gtk/main.c:1273
|
||||
#, c-format
|
||||
msgid "<b>by %s</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1345
|
||||
#: ../gtk/main.c:1343
|
||||
#, c-format
|
||||
msgid "%s proposed to start video. Do you accept ?"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1507
|
||||
#: ../gtk/main.c:1505
|
||||
msgid "Website link"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1556
|
||||
#: ../gtk/main.c:1554
|
||||
msgid "Linphone - a video internet phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1648
|
||||
#: ../gtk/main.c:1646
|
||||
#, c-format
|
||||
msgid "%s (Default)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1980 ../coreapi/callbacks.c:1045
|
||||
#: ../gtk/main.c:1978 ../coreapi/callbacks.c:1057
|
||||
#, c-format
|
||||
msgid "We are transferred to %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:1990
|
||||
#: ../gtk/main.c:1988
|
||||
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:2135
|
||||
#: ../gtk/main.c:2136
|
||||
msgid "A free SIP video-phone"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.c:2241
|
||||
#, c-format
|
||||
msgid "Hello\n"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:505
|
||||
msgid "Add to addressbook"
|
||||
msgstr ""
|
||||
|
|
@ -238,6 +232,10 @@ msgstr ""
|
|||
msgid "Search in %s directory"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:924
|
||||
msgid "Invalid sip contact !"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/friendlist.c:976
|
||||
#, c-format
|
||||
msgid "Edit contact '%s'"
|
||||
|
|
@ -278,7 +276,7 @@ msgstr "Parâmetros"
|
|||
msgid "Enabled"
|
||||
msgstr "Ativado"
|
||||
|
||||
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:20
|
||||
#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 ../gtk/parameters.ui.h:17
|
||||
msgid "Disabled"
|
||||
msgstr "Desativado"
|
||||
|
||||
|
|
@ -443,7 +441,7 @@ msgstr ""
|
|||
msgid "Enter your linphone.org username"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:82 ../gtk/ldap.ui.h:4
|
||||
#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:4
|
||||
msgid "Username:"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -507,8 +505,7 @@ 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 ""
|
||||
|
||||
|
|
@ -832,7 +829,7 @@ msgstr ""
|
|||
msgid "Audio Assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:31
|
||||
#: ../gtk/audio_assistant.c:513 ../gtk/main.ui.h:32
|
||||
msgid "Audio assistant"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -909,103 +906,103 @@ msgid "Default"
|
|||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:22
|
||||
msgid "_Options"
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:23
|
||||
msgid "Set configuration URI"
|
||||
msgid "_Options"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:24
|
||||
msgid "Always start video"
|
||||
msgid "Set configuration URI"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:25
|
||||
msgid "Enable self-view"
|
||||
msgid "Always start video"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:26
|
||||
msgid "_Help"
|
||||
msgid "Enable self-view"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:27
|
||||
msgid "Show debug window"
|
||||
msgid "_Help"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:28
|
||||
msgid "_Homepage"
|
||||
msgid "Show debug window"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:29
|
||||
msgid "Check _Updates"
|
||||
msgid "_Homepage"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:30
|
||||
msgid "Check _Updates"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:31
|
||||
msgid "Account assistant"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:32
|
||||
#: ../gtk/main.ui.h:33
|
||||
msgid "SIP address or phone number:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:33
|
||||
#: ../gtk/main.ui.h:34
|
||||
msgid "Initiate a new call"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:34
|
||||
#: ../gtk/main.ui.h:35
|
||||
msgid "Contacts"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:35
|
||||
#: ../gtk/main.ui.h:36
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:36
|
||||
#: ../gtk/main.ui.h:37
|
||||
msgid "<b>Add contacts from directory</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:37
|
||||
#: ../gtk/main.ui.h:38
|
||||
msgid "Add contact"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:38
|
||||
#: ../gtk/main.ui.h:39
|
||||
msgid "Recent calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:39
|
||||
#: ../gtk/main.ui.h:40
|
||||
msgid "My current identity:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7
|
||||
#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:7
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8
|
||||
#: ../gtk/main.ui.h:42 ../gtk/tunnel_config.ui.h:8
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:42
|
||||
#: ../gtk/main.ui.h:43
|
||||
msgid "Internet connection:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:43
|
||||
#: ../gtk/main.ui.h:44
|
||||
msgid "Automatically log me in"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3
|
||||
#: ../gtk/main.ui.h:45 ../gtk/password.ui.h:3
|
||||
msgid "UserID"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:45
|
||||
#: ../gtk/main.ui.h:46
|
||||
msgid "Login information"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:46
|
||||
msgid "<b>Welcome!</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/main.ui.h:47
|
||||
msgid "Delete"
|
||||
msgid "<b>Welcome!</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/about.ui.h:1
|
||||
|
|
@ -1181,299 +1178,307 @@ msgid "C"
|
|||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:11
|
||||
msgid "SIP (UDP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:12
|
||||
msgid "SIP (TCP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:13
|
||||
msgid "SIP (TLS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:14
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:15
|
||||
#: ../gtk/parameters.ui.h:12
|
||||
msgid "Set Maximum Transmission Unit:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:16
|
||||
#: ../gtk/parameters.ui.h:13
|
||||
msgid "Send DTMFs as SIP info"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:17
|
||||
msgid "Use IPv6 instead of IPv4"
|
||||
#: ../gtk/parameters.ui.h:14
|
||||
msgid "Allow IPv6"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:18
|
||||
#: ../gtk/parameters.ui.h:15
|
||||
msgid "<b>Transport</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:19
|
||||
#: ../gtk/parameters.ui.h:16
|
||||
msgid "SIP/UDP port"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:21
|
||||
#: ../gtk/parameters.ui.h:18
|
||||
msgid "Random"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:22
|
||||
#: ../gtk/parameters.ui.h:19
|
||||
msgid "SIP/TCP port"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:23
|
||||
#: ../gtk/parameters.ui.h:20
|
||||
msgid "Audio RTP/UDP:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:24
|
||||
#: ../gtk/parameters.ui.h:21
|
||||
msgid "Fixed"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:25
|
||||
#: ../gtk/parameters.ui.h:22
|
||||
msgid "Video RTP/UDP:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:26
|
||||
#: ../gtk/parameters.ui.h:23
|
||||
msgid "Media encryption type"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:27
|
||||
#: ../gtk/parameters.ui.h:24
|
||||
msgid "Media encryption is mandatory"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:28
|
||||
#: ../gtk/parameters.ui.h:25
|
||||
msgid "Tunnel"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:29
|
||||
#: ../gtk/parameters.ui.h:26
|
||||
msgid "DSCP fields"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:30
|
||||
#: ../gtk/parameters.ui.h:27
|
||||
msgid "<b>Network protocol and ports</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:31
|
||||
#: ../gtk/parameters.ui.h:28
|
||||
msgid "Direct connection to the Internet"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:32
|
||||
#: ../gtk/parameters.ui.h:29
|
||||
msgid "Behind NAT / Firewall (specify gateway IP )"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:33
|
||||
#: ../gtk/parameters.ui.h:30
|
||||
msgid "Behind NAT / Firewall (use STUN to resolve)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:34
|
||||
#: ../gtk/parameters.ui.h:31
|
||||
msgid "Behind NAT / Firewall (use ICE)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:35
|
||||
#: ../gtk/parameters.ui.h:32
|
||||
msgid "Behind NAT / Firewall (use uPnP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:36
|
||||
#: ../gtk/parameters.ui.h:33
|
||||
msgid "Public IP address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:37
|
||||
#: ../gtk/parameters.ui.h:34
|
||||
msgid "Stun server:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:38
|
||||
#: ../gtk/parameters.ui.h:35
|
||||
msgid "<b>NAT and Firewall</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:39
|
||||
#: ../gtk/parameters.ui.h:36
|
||||
msgid "Network settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:40
|
||||
#: ../gtk/parameters.ui.h:37
|
||||
msgid "Ring sound:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:41
|
||||
#: ../gtk/parameters.ui.h:38
|
||||
msgid "ALSA special device (optional):"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:42
|
||||
#: ../gtk/parameters.ui.h:39
|
||||
msgid "Capture device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:43
|
||||
#: ../gtk/parameters.ui.h:40
|
||||
msgid "Ring device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:44
|
||||
#: ../gtk/parameters.ui.h:41
|
||||
msgid "Playback device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:45
|
||||
#: ../gtk/parameters.ui.h:42
|
||||
msgid "Enable echo cancellation"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:46
|
||||
#: ../gtk/parameters.ui.h:43
|
||||
msgid "<b>Audio</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:47
|
||||
#: ../gtk/parameters.ui.h:44
|
||||
msgid "Video input device:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:48
|
||||
#: ../gtk/parameters.ui.h:45
|
||||
msgid "Prefered video resolution:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:49
|
||||
#: ../gtk/parameters.ui.h:46
|
||||
msgid "Video output method:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:50
|
||||
#: ../gtk/parameters.ui.h:47
|
||||
msgid "Show camera preview"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:51
|
||||
#: ../gtk/parameters.ui.h:48
|
||||
msgid "<b>Video</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:52
|
||||
#: ../gtk/parameters.ui.h:49
|
||||
msgid "Multimedia settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:53
|
||||
#: ../gtk/parameters.ui.h:50
|
||||
msgid "This section defines your SIP address when not using a SIP account"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:54
|
||||
#: ../gtk/parameters.ui.h:51
|
||||
msgid "Your display name (eg: John Doe):"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:55
|
||||
#: ../gtk/parameters.ui.h:52
|
||||
msgid "Your username:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:56
|
||||
#: ../gtk/parameters.ui.h:53
|
||||
msgid "Your resulting SIP address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:57
|
||||
#: ../gtk/parameters.ui.h:54
|
||||
msgid "<b>Default identity</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:58
|
||||
#: ../gtk/parameters.ui.h:55
|
||||
msgid "Wizard"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:59
|
||||
#: ../gtk/parameters.ui.h:56
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:60
|
||||
#: ../gtk/parameters.ui.h:57
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
#: ../gtk/parameters.ui.h:61
|
||||
#: ../gtk/parameters.ui.h:58
|
||||
msgid "Remove"
|
||||
msgstr "Remover"
|
||||
|
||||
#: ../gtk/parameters.ui.h:62
|
||||
#: ../gtk/parameters.ui.h:59
|
||||
msgid "<b>Proxy accounts</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:63
|
||||
#: ../gtk/parameters.ui.h:60
|
||||
msgid "Erase all passwords"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:64
|
||||
#: ../gtk/parameters.ui.h:61
|
||||
msgid "<b>Privacy</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:65
|
||||
#: ../gtk/parameters.ui.h:62
|
||||
msgid "Automatically answer when a call is received"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:63
|
||||
msgid "<b>Auto-answer</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:64
|
||||
msgid "Manage SIP Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:4
|
||||
#: ../gtk/parameters.ui.h:65 ../gtk/tunnel_config.ui.h:4
|
||||
msgid "Enable"
|
||||
msgstr "Ativado"
|
||||
|
||||
#: ../gtk/parameters.ui.h:67 ../gtk/tunnel_config.ui.h:5
|
||||
#: ../gtk/parameters.ui.h:66 ../gtk/tunnel_config.ui.h:5
|
||||
msgid "Disable"
|
||||
msgstr "Desativar"
|
||||
|
||||
#: ../gtk/parameters.ui.h:68
|
||||
#: ../gtk/parameters.ui.h:67
|
||||
msgid "<b>Codecs</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:69
|
||||
#: ../gtk/parameters.ui.h:68
|
||||
msgid "0 stands for \"unlimited\""
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:70
|
||||
#: ../gtk/parameters.ui.h:69
|
||||
msgid "Upload speed limit in Kbit/sec:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:71
|
||||
#: ../gtk/parameters.ui.h:70
|
||||
msgid "Download speed limit in Kbit/sec:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:72
|
||||
#: ../gtk/parameters.ui.h:71
|
||||
msgid "Enable adaptive rate control"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:73
|
||||
#: ../gtk/parameters.ui.h:72
|
||||
msgid ""
|
||||
"<i>Adaptive rate control is a technique to dynamically guess the available "
|
||||
"bandwidth during a call.</i>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:74
|
||||
#: ../gtk/parameters.ui.h:73
|
||||
msgid "<b>Bandwidth control</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:75
|
||||
#: ../gtk/parameters.ui.h:74
|
||||
msgid "Codecs"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:76
|
||||
#: ../gtk/parameters.ui.h:75
|
||||
msgid "<b>Language</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:77
|
||||
#: ../gtk/parameters.ui.h:76
|
||||
msgid "Show advanced settings"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:78
|
||||
#: ../gtk/parameters.ui.h:77
|
||||
msgid "<b>Level</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:79
|
||||
#: ../gtk/parameters.ui.h:78
|
||||
msgid "User interface"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:2
|
||||
#: ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:2
|
||||
msgid "Server address:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:81 ../gtk/ldap.ui.h:3
|
||||
#: ../gtk/parameters.ui.h:80 ../gtk/ldap.ui.h:3
|
||||
msgid "Authentication method:"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:83
|
||||
#: ../gtk/parameters.ui.h:82
|
||||
msgid "<b>LDAP Account setup</b>"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:84
|
||||
#: ../gtk/parameters.ui.h:83
|
||||
msgid "LDAP"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:85
|
||||
#: ../gtk/parameters.ui.h:84
|
||||
msgid "Done"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:85
|
||||
msgid "SIP (UDP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:86
|
||||
msgid "SIP (TCP)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/parameters.ui.h:87
|
||||
msgid "SIP (TLS)"
|
||||
msgstr ""
|
||||
|
||||
#: ../gtk/buddylookup.ui.h:1
|
||||
msgid "Search contacts in directory"
|
||||
msgstr ""
|
||||
|
|
@ -1677,11 +1682,8 @@ msgstr ""
|
|||
|
||||
#: ../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. "
|
||||
"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 ""
|
||||
|
||||
#: ../gtk/provisioning-fetch.ui.h:1
|
||||
|
|
@ -1692,60 +1694,60 @@ msgstr ""
|
|||
msgid "Please wait while fetching configuration from server..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:1512
|
||||
#: ../coreapi/linphonecore.c:1534
|
||||
msgid "Ready"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2499
|
||||
#: ../coreapi/linphonecore.c:2534
|
||||
msgid "Configuring"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2673
|
||||
#: ../coreapi/linphonecore.c:2708
|
||||
msgid "Looking for telephone number destination..."
|
||||
msgstr "Procurando por telefone de destino..."
|
||||
|
||||
#: ../coreapi/linphonecore.c:2675
|
||||
#: ../coreapi/linphonecore.c:2710
|
||||
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:2961
|
||||
#: ../coreapi/linphonecore.c:2996
|
||||
msgid "Contacting"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:2966
|
||||
#: ../coreapi/linphonecore.c:3001
|
||||
msgid "Could not call"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3116
|
||||
#: ../coreapi/linphonecore.c:3152
|
||||
msgid "Sorry, we have reached the maximum number of simultaneous calls"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3274
|
||||
#: ../coreapi/linphonecore.c:3310
|
||||
msgid "is contacting you"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3275
|
||||
#: ../coreapi/linphonecore.c:3311
|
||||
msgid " and asked autoanswer."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3399
|
||||
#: ../coreapi/linphonecore.c:3435
|
||||
msgid "Modifying call parameters..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3747
|
||||
#: ../coreapi/linphonecore.c:3782
|
||||
msgid "Connected."
|
||||
msgstr "Conectado."
|
||||
|
||||
#: ../coreapi/linphonecore.c:3772
|
||||
#: ../coreapi/linphonecore.c:3807
|
||||
msgid "Call aborted"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3962
|
||||
#: ../coreapi/linphonecore.c:3997
|
||||
msgid "Could not pause the call"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecore.c:3965
|
||||
#: ../coreapi/linphonecore.c:4000
|
||||
msgid "Pausing the current call..."
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1821,117 +1823,117 @@ msgid ""
|
|||
"It should look like sip:username@proxydomain, such as sip:alice@example.net"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/proxy.c:1403
|
||||
#: ../coreapi/proxy.c:1416
|
||||
#, c-format
|
||||
msgid "Could not login as %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:419
|
||||
#: ../coreapi/callbacks.c:428
|
||||
msgid "Remote ringing."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:431
|
||||
#: ../coreapi/callbacks.c:440
|
||||
msgid "Remote ringing..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:448
|
||||
#: ../coreapi/callbacks.c:461
|
||||
msgid "Early media."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:521
|
||||
#: ../coreapi/callbacks.c:533
|
||||
#, c-format
|
||||
msgid "Call with %s is paused."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:534
|
||||
#: ../coreapi/callbacks.c:546
|
||||
#, c-format
|
||||
msgid "Call answered by %s - on hold."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:544
|
||||
#: ../coreapi/callbacks.c:556
|
||||
msgid "Call resumed."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:548
|
||||
#: ../coreapi/callbacks.c:560
|
||||
#, c-format
|
||||
msgid "Call answered by %s."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:571
|
||||
#: ../coreapi/callbacks.c:583
|
||||
msgid "Incompatible, check codecs or security settings..."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:576 ../coreapi/callbacks.c:888
|
||||
#: ../coreapi/callbacks.c:588 ../coreapi/callbacks.c:900
|
||||
msgid "Incompatible media parameters."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:606
|
||||
#: ../coreapi/callbacks.c:618
|
||||
msgid "We have been resumed."
|
||||
msgstr ""
|
||||
|
||||
#. we are being paused
|
||||
#: ../coreapi/callbacks.c:614
|
||||
#: ../coreapi/callbacks.c:626
|
||||
msgid "We are paused by other party."
|
||||
msgstr ""
|
||||
|
||||
#. reINVITE and in-dialogs UPDATE go here
|
||||
#: ../coreapi/callbacks.c:648
|
||||
#: ../coreapi/callbacks.c:660
|
||||
msgid "Call is updated by remote."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:764
|
||||
#: ../coreapi/callbacks.c:776
|
||||
msgid "Call terminated."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:792
|
||||
#: ../coreapi/callbacks.c:804
|
||||
msgid "User is busy."
|
||||
msgstr "Usuário está ocupado."
|
||||
|
||||
#: ../coreapi/callbacks.c:793
|
||||
#: ../coreapi/callbacks.c:805
|
||||
msgid "User is temporarily unavailable."
|
||||
msgstr "Usuário está temporáriamente indisponível."
|
||||
|
||||
#. char *retrymsg=_("%s. Retry after %i minute(s).");
|
||||
#: ../coreapi/callbacks.c:795
|
||||
#: ../coreapi/callbacks.c:807
|
||||
msgid "User does not want to be disturbed."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:796
|
||||
#: ../coreapi/callbacks.c:808
|
||||
msgid "Call declined."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:811
|
||||
#: ../coreapi/callbacks.c:823
|
||||
msgid "Request timeout."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:842
|
||||
#: ../coreapi/callbacks.c:854
|
||||
msgid "Redirected"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:897
|
||||
#: ../coreapi/callbacks.c:909
|
||||
msgid "Call failed."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:975
|
||||
#: ../coreapi/callbacks.c:987
|
||||
#, c-format
|
||||
msgid "Registration on %s successful."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:976
|
||||
#: ../coreapi/callbacks.c:988
|
||||
#, c-format
|
||||
msgid "Unregistration on %s done."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:994
|
||||
#: ../coreapi/callbacks.c:1006
|
||||
msgid "no response timeout"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:997
|
||||
#: ../coreapi/callbacks.c:1009
|
||||
#, c-format
|
||||
msgid "Registration on %s failed: %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/callbacks.c:1004
|
||||
#: ../coreapi/callbacks.c:1016
|
||||
msgid "Service unavailable, retrying"
|
||||
msgstr ""
|
||||
|
||||
|
|
@ -1941,7 +1943,11 @@ msgstr ""
|
|||
msgid "Authentication token is %s"
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecall.c:3600
|
||||
#: ../coreapi/linphonecall.c:1305
|
||||
msgid "Call parameters were successfully modified."
|
||||
msgstr ""
|
||||
|
||||
#: ../coreapi/linphonecall.c:3659
|
||||
#, c-format
|
||||
msgid "You have missed %i call."
|
||||
msgid_plural "You have missed %i calls."
|
||||
|
|
|
|||
435
po/zh_CN.po
435
po/zh_CN.po
File diff suppressed because it is too large
Load diff
441
po/zh_TW.po
441
po/zh_TW.po
File diff suppressed because it is too large
Load diff
|
|
@ -7,6 +7,6 @@ Comment[fr]=Assistant audio de Linphone.
|
|||
Comment[ru]=Помощник аудио Linphone
|
||||
Type=Application
|
||||
Exec=linphone --run-audio-assistant
|
||||
Icon=@prefix@/share/pixmaps/linphone/linphone.png
|
||||
Icon=linphone
|
||||
Terminal=false
|
||||
Categories=Network;Telephony;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ GenericName=Web-phone
|
|||
Comment=Linphone is a web-phone
|
||||
Type=Application
|
||||
Exec=linphone
|
||||
Icon=@prefix@/share/pixmaps/linphone/linphone.png
|
||||
Icon=linphone
|
||||
Terminal=false
|
||||
Categories=Network;Telephony;
|
||||
|
||||
|
|
|
|||
|
|
@ -84,11 +84,17 @@ void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState
|
|||
|
||||
void call_stats_updated(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallStats *lstats) {
|
||||
stats* counters = get_stats(lc);
|
||||
counters->number_of_LinphoneCallStatsUpdated++;
|
||||
if (lstats->updated == LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE) {
|
||||
counters->number_of_rtcp_received++;
|
||||
} else if (lstats->updated == LINPHONE_CALL_STATS_SENT_RTCP_UPDATE) {
|
||||
counters->number_of_rtcp_sent++;
|
||||
}
|
||||
counters->audio_download_bandwidth = linphone_call_get_audio_stats(call)->download_bandwidth;
|
||||
counters->audio_upload_bandwidth = linphone_call_get_audio_stats(call)->upload_bandwidth;
|
||||
counters->video_download_bandwidth = linphone_call_get_video_stats(call)->download_bandwidth;
|
||||
counters->video_upload_bandwidth = linphone_call_get_video_stats(call)->upload_bandwidth;
|
||||
|
||||
}
|
||||
|
||||
void linphone_call_encryption_changed(LinphoneCore *lc, LinphoneCall *call, bool_t on, const char *authentication_token) {
|
||||
|
|
@ -260,7 +266,7 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr
|
|||
linphone_core_accept_call_with_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc),callee_params);
|
||||
}else if (build_callee_params){
|
||||
LinphoneCallParams *default_params=linphone_core_create_call_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc));
|
||||
ms_error("Created default call params with video=%i", linphone_call_params_video_enabled(default_params));
|
||||
ms_message("Created default call params with video=%i", linphone_call_params_video_enabled(default_params));
|
||||
linphone_core_accept_call_with_params(callee_mgr->lc,linphone_core_get_current_call(callee_mgr->lc),default_params);
|
||||
linphone_call_params_destroy(default_params);
|
||||
}else{
|
||||
|
|
@ -1295,7 +1301,51 @@ bool_t pause_call_1(LinphoneCoreManager* mgr_1,LinphoneCall* call_1,LinphoneCore
|
|||
CU_ASSERT_EQUAL(linphone_call_get_state(call_2),LinphoneCallPausedByRemote);
|
||||
return linphone_call_get_state(call_1) == LinphoneCallPaused && linphone_call_get_state(call_2)==LinphoneCallPausedByRemote;
|
||||
}
|
||||
#if 0
|
||||
void concurrent_paused_resumed_base() {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
LinphoneCall* call_pauline,call_marie;
|
||||
const rtp_stats_t * stats;
|
||||
|
||||
|
||||
CU_ASSERT_TRUE(call(pauline,marie));
|
||||
|
||||
call_pauline = linphone_core_get_current_call(pauline->lc);
|
||||
call_marie = linphone_core_get_current_call(marie->lc);
|
||||
|
||||
linphone_core_pause_call(pauline->lc,call_pauline);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1));
|
||||
|
||||
linphone_core_pause_call(marie->lc,call_marie);
|
||||
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1));
|
||||
|
||||
/*stay in pause a little while in order to generate traffic*/
|
||||
wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000);
|
||||
|
||||
linphone_core_resume_call(pauline->lc,call_pauline);
|
||||
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
/*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/
|
||||
wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000);
|
||||
|
||||
/*since RTCP streams are reset when call is paused/resumed, there should be no loss at all*/
|
||||
stats = rtp_session_get_stats(call_pauline->sessions->rtp_session);
|
||||
CU_ASSERT_EQUAL(stats->cum_packet_loss, 0);
|
||||
|
||||
/*just to sleep*/
|
||||
linphone_core_terminate_all_calls(pauline->lc);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1));
|
||||
|
||||
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
#endif
|
||||
static void call_paused_resumed_from_callee(void) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
|
|
@ -1614,7 +1664,7 @@ static void call_with_declined_video_using_policy(void) {
|
|||
call_with_declined_video_base(TRUE);
|
||||
}
|
||||
|
||||
static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) {
|
||||
static void video_call_base_2(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) {
|
||||
LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0};
|
||||
LinphoneCall* marie_call;
|
||||
LinphoneCall* pauline_call;
|
||||
|
|
@ -1689,12 +1739,15 @@ static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* ma
|
|||
|
||||
liblinphone_tester_check_rtcp(marie,pauline);
|
||||
|
||||
linphone_core_terminate_all_calls(pauline->lc);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1));
|
||||
}
|
||||
|
||||
}
|
||||
static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy,LinphoneMediaEncryption mode, bool_t callee_video_enabled, bool_t caller_video_enabled) {
|
||||
video_call_base_2(pauline,marie,using_policy,mode,callee_video_enabled,caller_video_enabled);
|
||||
linphone_core_terminate_all_calls(pauline->lc);
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1));
|
||||
CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1));
|
||||
}
|
||||
static void video_call(void) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
|
|
@ -2033,6 +2086,18 @@ static void srtp_call() {
|
|||
static void zrtp_call() {
|
||||
call_base(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE);
|
||||
}
|
||||
|
||||
static void zrtp_sas_call() {
|
||||
call_base_with_configfile(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE, "marie_zrtp_b256_rc", "pauline_zrtp_b256_rc");
|
||||
call_base_with_configfile(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE, "marie_zrtp_b256_rc", "pauline_rc");
|
||||
}
|
||||
|
||||
static void zrtp_cipher_call() {
|
||||
call_base_with_configfile(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE, "marie_zrtp_srtpsuite_aes256_rc", "pauline_zrtp_srtpsuite_aes256_rc");
|
||||
call_base_with_configfile(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE, "marie_zrtp_aes256_rc", "pauline_zrtp_aes256_rc");
|
||||
call_base_with_configfile(LinphoneMediaEncryptionZRTP,FALSE,FALSE,LinphonePolicyNoFirewall,FALSE, "marie_zrtp_aes256_rc", "pauline_rc");
|
||||
}
|
||||
|
||||
static void zrtp_video_call() {
|
||||
call_base(LinphoneMediaEncryptionZRTP,TRUE,FALSE,LinphonePolicyNoFirewall,FALSE);
|
||||
}
|
||||
|
|
@ -2221,9 +2286,9 @@ end:
|
|||
|
||||
}
|
||||
|
||||
void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc");
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc");
|
||||
void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel, const char *marie_rc, const char *pauline_rc) {
|
||||
LinphoneCoreManager* marie = linphone_core_manager_new(marie_rc);
|
||||
LinphoneCoreManager* pauline = linphone_core_manager_new(pauline_rc);
|
||||
if (enable_relay) {
|
||||
linphone_core_set_user_agent(marie->lc,"Natted Linphone",NULL);
|
||||
linphone_core_set_user_agent(pauline->lc,"Natted Linphone",NULL);
|
||||
|
|
@ -2270,10 +2335,10 @@ void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_r
|
|||
&&
|
||||
linphone_call_get_authentication_token(linphone_core_get_current_call(marie->lc))) {
|
||||
/*check SAS*/
|
||||
CU_ASSERT_STRING_EQUAL(linphone_call_get_authentication_token(linphone_core_get_current_call(pauline->lc))
|
||||
,linphone_call_get_authentication_token(linphone_core_get_current_call(marie->lc)));
|
||||
liblinphone_tester_check_rtcp(pauline,marie);
|
||||
break;
|
||||
CU_ASSERT_STRING_EQUAL(linphone_call_get_authentication_token(linphone_core_get_current_call(pauline->lc))
|
||||
,linphone_call_get_authentication_token(linphone_core_get_current_call(marie->lc)));
|
||||
liblinphone_tester_check_rtcp(pauline,marie);
|
||||
break;
|
||||
}
|
||||
linphone_core_iterate(marie->lc);
|
||||
linphone_core_iterate(pauline->lc);
|
||||
|
|
@ -2318,6 +2383,11 @@ void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_r
|
|||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel) {
|
||||
call_base_with_configfile(mode, enable_video, enable_relay, policy, enable_tunnel, "marie_rc", "pauline_rc");
|
||||
}
|
||||
|
||||
#ifdef VIDEO_ENABLED
|
||||
static void srtp_video_ice_call(void) {
|
||||
call_base(LinphoneMediaEncryptionSRTP,TRUE,FALSE,LinphonePolicyUseIce,FALSE);
|
||||
|
|
@ -2838,6 +2908,186 @@ static void multiple_early_media(void) {
|
|||
linphone_core_manager_destroy(marie2);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
}
|
||||
|
||||
static void check_media_direction(LinphoneCoreManager* mgr, LinphoneCall *call, MSList* lcs,LinphoneMediaDirection audio_dir, LinphoneMediaDirection video_dir) {
|
||||
CU_ASSERT_PTR_NOT_NULL(call);
|
||||
if (call) {
|
||||
int current_recv_iframe = mgr->stat.number_of_IframeDecoded;
|
||||
int expected_recv_iframe=0;
|
||||
int dummy = 0;
|
||||
const LinphoneCallParams *params = linphone_call_get_current_params(call);
|
||||
CU_ASSERT_EQUAL(audio_dir,linphone_call_params_get_audio_direction(params));
|
||||
CU_ASSERT_EQUAL(video_dir,linphone_call_params_get_video_direction(params));
|
||||
|
||||
linphone_call_set_next_video_frame_decoded_callback(call,linphone_call_cb,mgr->lc);
|
||||
linphone_call_send_vfu_request(call);
|
||||
|
||||
wait_for_list(lcs,&dummy,1,2000); /*on some device, it may take 3 to 4s to get audio from mic*/
|
||||
|
||||
switch (video_dir) {
|
||||
case LinphoneMediaDirectionInactive:
|
||||
CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5);
|
||||
case LinphoneMediaDirectionSendOnly:
|
||||
expected_recv_iframe = 0;
|
||||
CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5);
|
||||
break;
|
||||
case LinphoneMediaDirectionRecvOnly:
|
||||
CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->upload_bandwidth<5);
|
||||
case LinphoneMediaDirectionSendRecv:
|
||||
expected_recv_iframe = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs, &mgr->stat.number_of_IframeDecoded,current_recv_iframe + expected_recv_iframe,3000));
|
||||
|
||||
switch (audio_dir) {
|
||||
case LinphoneMediaDirectionInactive:
|
||||
CU_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5);
|
||||
case LinphoneMediaDirectionSendOnly:
|
||||
CU_ASSERT_TRUE(linphone_call_get_video_stats(call)->download_bandwidth<5);
|
||||
if (audio_dir == LinphoneMediaDirectionSendOnly) CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000));
|
||||
break;
|
||||
case LinphoneMediaDirectionRecvOnly:
|
||||
CU_ASSERT_TRUE(linphone_call_get_audio_stats(call)->upload_bandwidth<5);
|
||||
case LinphoneMediaDirectionSendRecv:
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_download_bandwidth,70,4000));
|
||||
if (audio_dir == LinphoneMediaDirectionSendRecv) CU_ASSERT_TRUE(wait_for_list(lcs,&mgr->stat.audio_upload_bandwidth,70,4000));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
static void accept_call_in_send_only_base(LinphoneCoreManager* pauline, LinphoneCoreManager *marie, MSList *lcs) {
|
||||
#define DEFAULT_WAIT_FOR 10000
|
||||
LinphoneCallParams *params;
|
||||
LinphoneVideoPolicy pol;
|
||||
LinphoneCall *call;
|
||||
pol.automatically_accept=1;
|
||||
pol.automatically_initiate=1;
|
||||
|
||||
linphone_core_enable_video(pauline->lc,TRUE,TRUE);
|
||||
linphone_core_set_video_policy(pauline->lc,&pol);
|
||||
linphone_core_set_video_device(pauline->lc,"Mire: Mire (synthetic moving picture)");
|
||||
|
||||
linphone_core_enable_video(marie->lc,TRUE,TRUE);
|
||||
linphone_core_set_video_policy(marie->lc,&pol);
|
||||
linphone_core_set_video_device(marie->lc,"Mire: Mire (synthetic moving picture)");
|
||||
|
||||
linphone_call_set_next_video_frame_decoded_callback(linphone_core_invite_address(pauline->lc,marie->identity)
|
||||
,linphone_call_cb
|
||||
,pauline->lc);
|
||||
|
||||
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallIncomingReceived,1,DEFAULT_WAIT_FOR));
|
||||
|
||||
{
|
||||
char* remote_uri = linphone_address_as_string_uri_only(pauline->identity);
|
||||
call = linphone_core_find_call_from_uri(marie->lc,remote_uri);
|
||||
ms_free(remote_uri);
|
||||
}
|
||||
|
||||
if (call) {
|
||||
params=linphone_core_create_default_call_parameters(marie->lc);
|
||||
linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendOnly);
|
||||
linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendOnly);
|
||||
linphone_core_accept_call_with_params(marie->lc,call,params);
|
||||
linphone_call_params_destroy(params);
|
||||
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning,1,DEFAULT_WAIT_FOR));
|
||||
CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallPausedByRemote,1,DEFAULT_WAIT_FOR));
|
||||
|
||||
check_media_direction(marie,call,lcs,LinphoneMediaDirectionSendOnly,LinphoneMediaDirectionSendOnly);
|
||||
}
|
||||
|
||||
|
||||
call=linphone_core_get_current_call(pauline->lc);
|
||||
if (call) {
|
||||
check_media_direction(pauline,call,lcs,LinphoneMediaDirectionRecvOnly,LinphoneMediaDirectionRecvOnly);
|
||||
}
|
||||
|
||||
}
|
||||
static void accept_call_in_send_base(bool_t caller_has_ice) {
|
||||
int begin;
|
||||
int leaked_objects;
|
||||
LinphoneCoreManager *pauline, *marie;
|
||||
MSList *lcs=NULL;;
|
||||
|
||||
belle_sip_object_enable_leak_detector(TRUE);
|
||||
begin=belle_sip_object_get_object_count();
|
||||
|
||||
pauline = linphone_core_manager_new("pauline_rc");
|
||||
if (caller_has_ice) {
|
||||
linphone_core_set_stun_server(pauline->lc,"stun.linphone.org");
|
||||
linphone_core_set_firewall_policy(pauline->lc,LinphonePolicyUseIce);
|
||||
}
|
||||
marie = linphone_core_manager_new("marie_rc");
|
||||
|
||||
lcs=ms_list_append(lcs,pauline->lc);
|
||||
lcs=ms_list_append(lcs,marie->lc);
|
||||
|
||||
accept_call_in_send_only_base(pauline,marie,lcs);
|
||||
|
||||
|
||||
end_call(marie,pauline);
|
||||
ms_free(lcs);
|
||||
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 accept_call_in_send_only(void) {
|
||||
accept_call_in_send_base(FALSE);
|
||||
}
|
||||
|
||||
static void accept_call_in_send_only_with_ice(void) {
|
||||
accept_call_in_send_base(TRUE);
|
||||
}
|
||||
|
||||
void two_accepted_call_in_send_only() {
|
||||
int begin;
|
||||
int leaked_objects;
|
||||
LinphoneCoreManager *pauline, *marie, *laure;
|
||||
MSList *lcs=NULL;
|
||||
|
||||
belle_sip_object_enable_leak_detector(TRUE);
|
||||
begin=belle_sip_object_get_object_count();
|
||||
|
||||
pauline = linphone_core_manager_new("pauline_rc");
|
||||
marie = linphone_core_manager_new("marie_rc");
|
||||
laure = linphone_core_manager_new("laure_rc");
|
||||
|
||||
lcs=ms_list_append(lcs,pauline->lc);
|
||||
lcs=ms_list_append(lcs,marie->lc);
|
||||
lcs=ms_list_append(lcs,laure->lc);
|
||||
|
||||
accept_call_in_send_only_base(pauline,marie,lcs);
|
||||
|
||||
|
||||
reset_counters(&marie->stat);
|
||||
accept_call_in_send_only_base(laure,marie,lcs);
|
||||
|
||||
end_call(marie,pauline);
|
||||
end_call(laure,marie);
|
||||
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
linphone_core_manager_destroy(laure);
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
static char *create_filepath(const char *dir, const char *filename, const char *ext) {
|
||||
|
|
@ -3501,6 +3751,87 @@ static void call_with_transport_change_after_released(void) {
|
|||
static void unsucessfull_call_with_transport_change_after_released(void) {
|
||||
call_with_transport_change_base(FALSE);
|
||||
}
|
||||
#ifdef VIDEO_ENABLED
|
||||
|
||||
static void video_call_with_re_invite_inactive_followed_by_re_invite_base(bool_t no_sdp) {
|
||||
int begin;
|
||||
int leaked_objects;
|
||||
LinphoneCoreManager* marie;
|
||||
LinphoneCoreManager* pauline;
|
||||
LinphoneCallParams *params;
|
||||
MSList *lcs=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");
|
||||
linphone_core_set_avpf_mode(pauline->lc,TRUE);
|
||||
linphone_core_set_video_device(pauline->lc,"Mire: Mire (synthetic moving picture)");
|
||||
linphone_core_set_video_device(marie->lc,"Mire: Mire (synthetic moving picture)");
|
||||
linphone_core_set_avpf_mode(marie->lc,TRUE);
|
||||
lcs=ms_list_append(lcs,pauline->lc);
|
||||
lcs=ms_list_append(lcs,marie->lc);
|
||||
|
||||
video_call_base_2(marie,pauline,TRUE,LinphoneMediaEncryptionNone,TRUE,TRUE);
|
||||
|
||||
if (linphone_core_get_current_call(marie->lc)) {
|
||||
params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc));
|
||||
linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionInactive);
|
||||
linphone_call_params_set_video_direction(params,LinphoneMediaDirectionInactive);
|
||||
|
||||
linphone_core_update_call(marie->lc, linphone_core_get_current_call(marie->lc),params);
|
||||
linphone_call_params_destroy(params);
|
||||
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallUpdating,1));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallPausedByRemote,1));
|
||||
|
||||
check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionInactive,LinphoneMediaDirectionInactive);
|
||||
check_media_direction(pauline,linphone_core_get_current_call(pauline->lc), lcs, LinphoneMediaDirectionInactive, LinphoneMediaDirectionInactive);
|
||||
|
||||
if (no_sdp) {
|
||||
linphone_core_enable_sdp_200_ack(marie->lc,TRUE);
|
||||
}
|
||||
|
||||
/*
|
||||
currently update call cannot be used in paused state, might not be good.
|
||||
params=linphone_core_create_call_params(marie->lc,linphone_core_get_current_call(marie->lc));
|
||||
linphone_call_params_set_audio_direction(params,LinphoneMediaDirectionSendRecv);
|
||||
linphone_call_params_set_video_direction(params,LinphoneMediaDirectionSendRecv);
|
||||
linphone_core_update_call(marie->lc,linphone_core_get_current_call(marie->lc),params);
|
||||
linphone_call_params_destroy(params);
|
||||
*/
|
||||
|
||||
linphone_core_resume_call(marie->lc,linphone_core_get_current_call(marie->lc));
|
||||
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallResuming,1));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2));
|
||||
|
||||
check_media_direction(marie,linphone_core_get_current_call(marie->lc),lcs,LinphoneMediaDirectionSendRecv,LinphoneMediaDirectionSendRecv);
|
||||
check_media_direction(pauline,linphone_core_get_current_call(pauline->lc),lcs,LinphoneMediaDirectionSendRecv,LinphoneMediaDirectionSendRecv);
|
||||
|
||||
}
|
||||
end_call(marie,pauline);
|
||||
linphone_core_manager_destroy(marie);
|
||||
linphone_core_manager_destroy(pauline);
|
||||
|
||||
leaked_objects=belle_sip_object_get_object_count()-begin;
|
||||
CU_ASSERT_TRUE(leaked_objects==0);
|
||||
if (leaked_objects>0){
|
||||
belle_sip_object_dump_active_objects();
|
||||
}
|
||||
}
|
||||
|
||||
static void video_call_with_re_invite_inactive_followed_by_re_invite() {
|
||||
video_call_with_re_invite_inactive_followed_by_re_invite_base(FALSE);
|
||||
}
|
||||
|
||||
static void video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp() {
|
||||
video_call_with_re_invite_inactive_followed_by_re_invite_base(TRUE);
|
||||
}
|
||||
#endif
|
||||
|
||||
test_t call_tests[] = {
|
||||
{ "Phone number normalization", phone_number_normalization },
|
||||
|
|
@ -3534,6 +3865,8 @@ test_t call_tests[] = {
|
|||
{ "Call paused resumed from callee", call_paused_resumed_from_callee },
|
||||
{ "SRTP call", srtp_call },
|
||||
{ "ZRTP call",zrtp_call},
|
||||
{ "ZRTP SAS call",zrtp_sas_call},
|
||||
{ "ZRTP Cipher call",zrtp_cipher_call},
|
||||
{ "DTLS SRTP call",dtls_srtp_call},
|
||||
{ "DTLS SRTP call with media relay", dtls_srtp_call_with_media_realy},
|
||||
{ "ZRTP video call",zrtp_video_call},
|
||||
|
|
@ -3567,6 +3900,11 @@ test_t call_tests[] = {
|
|||
{ "DTLS SRTP ice video call",dtls_srtp_ice_video_call},
|
||||
{ "DTLS SRTP ice video call with relay",dtls_srtp_ice_video_call_with_relay},
|
||||
{ "Video call with limited bandwidth", video_call_limited_bandwidth},
|
||||
{ "Video call accepted in send only", accept_call_in_send_only},
|
||||
{ "Video call accepted in send only with ice", accept_call_in_send_only_with_ice},
|
||||
{ "2 Video call accepted in send only", two_accepted_call_in_send_only},
|
||||
{ "Video call with re-invite(inactive) followed by re-invite", video_call_with_re_invite_inactive_followed_by_re_invite},
|
||||
{ "Video call with re-invite(inactive) followed by re-invite(no sdp)", video_call_with_re_invite_inactive_followed_by_re_invite_no_sdp},
|
||||
#endif
|
||||
{ "SRTP ice call", srtp_ice_call },
|
||||
{ "ZRTP ice call", zrtp_ice_call },
|
||||
|
|
@ -3606,6 +3944,7 @@ test_t call_tests[] = {
|
|||
{ "Call with generic CN", call_with_generic_cn },
|
||||
{ "Call with transport change after released", call_with_transport_change_after_released },
|
||||
{ "Unsuccessful call with transport change after released",unsucessfull_call_with_transport_change_after_released}
|
||||
|
||||
};
|
||||
|
||||
test_suite_t call_test_suite = {
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ int bc_tester_nb_tests(const char *suite_name) {
|
|||
void bc_tester_list_suites() {
|
||||
int j;
|
||||
for(j=0;j<nb_test_suites;j++) {
|
||||
fprintf(stdout, "%s\n", bc_tester_suite_name(j));
|
||||
tester_printf(verbosity_info, "%s", bc_tester_suite_name(j));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ void bc_tester_list_tests(const char *suite_name) {
|
|||
int j;
|
||||
for( j = 0; j < bc_tester_nb_tests(suite_name); j++) {
|
||||
const char *test_name = bc_tester_test_name(suite_name, j);
|
||||
fprintf(stdout, "%s\n", test_name);
|
||||
tester_printf(verbosity_info, "%s", test_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -136,19 +136,19 @@ static void all_complete_message_handler(const CU_pFailureRecord pFailure) {
|
|||
}
|
||||
|
||||
static void suite_init_failure_message_handler(const CU_pSuite pSuite) {
|
||||
tester_printf(verbosity_error,"Suite initialization failed for [%s].", pSuite->pName);
|
||||
tester_printf(verbosity_error,"Suite initialization failed for [%s]", pSuite->pName);
|
||||
}
|
||||
|
||||
static void suite_cleanup_failure_message_handler(const CU_pSuite pSuite) {
|
||||
tester_printf(verbosity_error,"Suite cleanup failed for [%s].", pSuite->pName);
|
||||
tester_printf(verbosity_error,"Suite cleanup failed for [%s]", pSuite->pName);
|
||||
}
|
||||
|
||||
#ifdef HAVE_CU_GET_SUITE
|
||||
static void suite_start_message_handler(const CU_pSuite pSuite) {
|
||||
tester_printf(verbosity_info,"Suite [%s] started\n", pSuite->pName);
|
||||
tester_printf(verbosity_info,"Suite [%s] started", pSuite->pName);
|
||||
}
|
||||
static void suite_complete_message_handler(const CU_pSuite pSuite, const CU_pFailureRecord pFailure) {
|
||||
tester_printf(verbosity_info,"Suite [%s] ended\n", pSuite->pName);
|
||||
tester_printf(verbosity_info,"Suite [%s] ended", pSuite->pName);
|
||||
}
|
||||
|
||||
static void test_start_message_handler(const CU_pTest pTest, const CU_pSuite pSuite) {
|
||||
|
|
@ -160,22 +160,23 @@ static void test_complete_message_handler(const CU_pTest pTest,
|
|||
const CU_pSuite pSuite,
|
||||
const CU_pFailureRecord pFailureList) {
|
||||
int i;
|
||||
char * result = malloc(sizeof(char)*2048);//not very pretty but...
|
||||
char result[2048];
|
||||
char buffer[2048];
|
||||
CU_pFailureRecord pFailure = pFailureList;
|
||||
sprintf(result, "Suite [%s] Test [%s]", pSuite->pName, pTest->pName);
|
||||
snprintf(result, sizeof(result), "Suite [%s] Test [%s]", pSuite->pName, pTest->pName);
|
||||
if (pFailure) {
|
||||
strncat(result, " failed:", strlen(" failed:"));
|
||||
for (i = 1 ; (NULL != pFailure) ; pFailure = pFailure->pNext, i++) {
|
||||
sprintf(result, "%s\n %d. %s:%u - %s", result, i,
|
||||
snprintf(buffer, sizeof(buffer), "\n %d. %s:%u - %s", i,
|
||||
(NULL != pFailure->strFileName) ? pFailure->strFileName : "",
|
||||
pFailure->uiLineNumber,
|
||||
(NULL != pFailure->strCondition) ? pFailure->strCondition : "");
|
||||
strncat(result, buffer, strlen(buffer));
|
||||
}
|
||||
} else {
|
||||
strncat(result, " passed", strlen(" passed"));
|
||||
}
|
||||
tester_printf(verbosity_info,"%s\n", result);
|
||||
free(result);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
@ -252,7 +253,7 @@ int bc_tester_run_tests(const char *suite_name, const char *test_name) {
|
|||
|
||||
|
||||
void bc_tester_helper(const char *name, const char* additionnal_helper) {
|
||||
fprintf(stdout,"%s --help\n"
|
||||
tester_printf(verbosity_info,"%s --help\n"
|
||||
"\t\t\t--list-suites\n"
|
||||
"\t\t\t--list-tests <suite>\n"
|
||||
"\t\t\t--suite <suite name>\n"
|
||||
|
|
@ -277,7 +278,6 @@ void bc_tester_init(void (*ftester_printf)(int level, const char *fmt, va_list a
|
|||
int bc_tester_parse_args(int argc, char **argv, int argid)
|
||||
{
|
||||
int i = argid;
|
||||
|
||||
if (strcmp(argv[i],"--help")==0){
|
||||
return -1;
|
||||
} else if (strcmp(argv[i],"--test")==0){
|
||||
|
|
@ -301,12 +301,12 @@ int bc_tester_parse_args(int argc, char **argv, int argid)
|
|||
} else if (strcmp(argv[i], "--xml") == 0){
|
||||
xml_enabled = 1;
|
||||
}else {
|
||||
fprintf(stderr, "Unknown option \"%s\"\n", argv[i]);
|
||||
tester_printf(verbosity_error, "Unknown option \"%s\"\n", argv[i]);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if( xml_enabled && (suite_name || test_name) ){
|
||||
fprintf(stderr, "Cannot use both XML and specific test suite\n");
|
||||
tester_printf(verbosity_error, "Cannot use both XML and specific test suite\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
|
@ -317,8 +317,9 @@ int bc_tester_parse_args(int argc, char **argv, int argid)
|
|||
int bc_tester_start() {
|
||||
int ret;
|
||||
if( xml_enabled ){
|
||||
char * xml_tmp_file = malloc(sizeof(char) * (strlen(xml_file) + strlen(".tmp") + 1));
|
||||
sprintf(xml_tmp_file, "%s.tmp", xml_file);
|
||||
size_t size = strlen(xml_file) + strlen(".tmp") + 1;
|
||||
char * xml_tmp_file = malloc(sizeof(char) * size);
|
||||
snprintf(xml_tmp_file, size, "%s.tmp", xml_file);
|
||||
CU_set_output_filename(xml_tmp_file);
|
||||
free(xml_tmp_file);
|
||||
}
|
||||
|
|
@ -342,14 +343,16 @@ void bc_tester_uninit() {
|
|||
/* Redisplay list of failed tests on end */
|
||||
if (CU_get_number_of_failure_records()){
|
||||
CU_basic_show_failures(CU_get_failure_list());
|
||||
tester_printf(verbosity_info,""); /*add missing final newline*/
|
||||
}
|
||||
CU_cleanup_registry();
|
||||
/*add missing final newline*/
|
||||
tester_printf(verbosity_info,"");
|
||||
|
||||
if( xml_enabled ){
|
||||
/*create real xml file only if tester did not crash*/
|
||||
char * xml_tmp_file = malloc(sizeof(char) * (strlen(xml_file) + strlen(".tmp-Results.xml") + 1));
|
||||
sprintf(xml_tmp_file, "%s.tmp-Results.xml", xml_file);
|
||||
size_t size = strlen(xml_file) + strlen(".tmp-Results.xml") + 1;
|
||||
char * xml_tmp_file = malloc(sizeof(char) * size);
|
||||
snprintf(xml_tmp_file, size, "%s.tmp-Results.xml", xml_file);
|
||||
rename(xml_tmp_file, xml_file);
|
||||
free(xml_tmp_file);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,7 +30,6 @@
|
|||
|
||||
|
||||
static FILE * log_file = NULL;
|
||||
static OrtpLogFunc ortp_log_handler;
|
||||
|
||||
#ifdef ANDROID
|
||||
|
||||
|
|
@ -132,23 +131,35 @@ static void liblinphone_tester_qnx_log_handler(OrtpLogLevel lev, const char *fmt
|
|||
#endif /* __QNX__ */
|
||||
|
||||
static void log_handler(int lev, const char *fmt, va_list args) {
|
||||
ortp_set_log_file(stderr);
|
||||
ortp_log_handler(lev, fmt, args);
|
||||
#ifdef WIN32
|
||||
vfprintf(lev == ORTP_ERROR ? stderr : stdout, fmt, args);
|
||||
fprintf(lev == ORTP_ERROR ? stderr : stdout, "\n");
|
||||
#else
|
||||
va_list cap;
|
||||
va_copy(cap,args);
|
||||
#ifdef ANDROID
|
||||
/* IMPORTANT: needed by liblinphone tester to retrieve suite list...*/
|
||||
cunit_android_trace_handler(lev == ORTP_ERROR, fmt, cap);
|
||||
#else
|
||||
/* Otherwise, we must use stdio to avoid log formatting (for autocompletion etc.) */
|
||||
vfprintf(lev == ORTP_ERROR ? stderr : stdout, fmt, cap);
|
||||
fprintf(lev == ORTP_ERROR ? stderr : stdout, "\n");
|
||||
#endif
|
||||
va_end(cap);
|
||||
#endif
|
||||
if (log_file){
|
||||
ortp_set_log_file(log_file);
|
||||
ortp_log_handler(lev, fmt, args);
|
||||
ortp_logv_out(lev, fmt, args);
|
||||
}
|
||||
}
|
||||
|
||||
void liblinphone_tester_init(void) {
|
||||
ortp_log_handler = ortp_get_log_handler();
|
||||
if (! log_file) {
|
||||
#if defined(ANDROID)
|
||||
linphone_core_set_log_handler(liblinphone_android_ortp_log_handler);
|
||||
linphone_core_set_log_handler(liblinphone_android_ortp_log_handler);
|
||||
#elif defined(__QNX__)
|
||||
linphone_core_set_log_handler(liblinphone_tester_qnx_log_handler);
|
||||
#else
|
||||
linphone_core_set_log_handler(ortp_logv_out);
|
||||
linphone_core_set_log_handler(liblinphone_tester_qnx_log_handler);
|
||||
#endif
|
||||
}
|
||||
|
||||
bc_tester_init(log_handler, ORTP_MESSAGE, ORTP_ERROR);
|
||||
liblinphone_tester_add_suites();
|
||||
|
|
@ -186,9 +197,9 @@ int main (int argc, char *argv[])
|
|||
|
||||
for(i = 1; i < argc; ++i) {
|
||||
if (strcmp(argv[i], "--verbose") == 0) {
|
||||
linphone_core_set_log_level(ORTP_MESSAGE);
|
||||
linphone_core_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
} else if (strcmp(argv[i], "--silent") == 0) {
|
||||
linphone_core_set_log_level(ORTP_FATAL);
|
||||
linphone_core_set_log_level_mask(ORTP_FATAL);
|
||||
} else if (strcmp(argv[i],"--log-file")==0){
|
||||
CHECK_ARG("--log-file", ++i, argc);
|
||||
log_file=fopen(argv[i],"w");
|
||||
|
|
@ -197,6 +208,7 @@ int main (int argc, char *argv[])
|
|||
return -2;
|
||||
} else {
|
||||
ms_message("Redirecting traces to file [%s]",argv[i]);
|
||||
ortp_set_log_file(log_file);
|
||||
}
|
||||
} else if (strcmp(argv[i],"--domain")==0){
|
||||
CHECK_ARG("--domain", ++i, argc);
|
||||
|
|
|
|||
|
|
@ -202,6 +202,7 @@ typedef struct _stats {
|
|||
char * dtmf_list_received;
|
||||
int dtmf_count;
|
||||
|
||||
int number_of_LinphoneCallStatsUpdated;
|
||||
int number_of_rtcp_sent;
|
||||
int number_of_rtcp_received;
|
||||
|
||||
|
|
@ -211,6 +212,10 @@ typedef struct _stats {
|
|||
int number_of_LinphoneCoreLogCollectionUploadStateDelivered;
|
||||
int number_of_LinphoneCoreLogCollectionUploadStateNotDelivered;
|
||||
int number_of_LinphoneCoreLogCollectionUploadStateInProgress;
|
||||
int audio_download_bandwidth;
|
||||
int audio_upload_bandwidth;
|
||||
int video_download_bandwidth;
|
||||
int video_upload_bandwidth;
|
||||
|
||||
}stats;
|
||||
|
||||
|
|
@ -297,6 +302,7 @@ void liblinphone_tester_enable_ipv6(bool_t enabled);
|
|||
void linphone_call_cb(LinphoneCall *call,void * user_data);
|
||||
void call_paused_resumed_base(bool_t multicast);
|
||||
void simple_call_base(bool_t enable_multicast_recv_side);
|
||||
void call_base_with_configfile(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel, const char *marie_rc, const char *pauline_rc);
|
||||
void call_base(LinphoneMediaEncryption mode, bool_t enable_video,bool_t enable_relay,LinphoneFirewallPolicy policy,bool_t enable_tunnel);
|
||||
bool_t call_with_caller_params(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr, const LinphoneCallParams *params);
|
||||
bool_t pause_call_1(LinphoneCoreManager* mgr_1,LinphoneCall* call_1,LinphoneCoreManager* mgr_2,LinphoneCall* call_2);
|
||||
|
|
|
|||
|
|
@ -143,11 +143,29 @@ static FILE* gzuncompress(const char* filepath) {
|
|||
}
|
||||
#endif
|
||||
|
||||
static time_t get_current_time() {
|
||||
struct timeval tp;
|
||||
struct tm *lt;
|
||||
#ifndef WIN32
|
||||
struct tm tmbuf;
|
||||
#endif
|
||||
time_t tt;
|
||||
ortp_gettimeofday(&tp,NULL);
|
||||
tt = (time_t)tp.tv_sec;
|
||||
|
||||
#ifdef WIN32
|
||||
lt = localtime(&tt);
|
||||
#else
|
||||
lt = localtime_r(&tt,&tmbuf);
|
||||
#endif
|
||||
return mktime(lt);
|
||||
}
|
||||
|
||||
static time_t check_file(LinphoneCoreManager* mgr) {
|
||||
|
||||
time_t last_log = ms_time(NULL);
|
||||
time_t cur_time = get_current_time();
|
||||
char* filepath = linphone_core_compress_log_collection(mgr->lc);
|
||||
time_t time_curr = -1;
|
||||
time_t log_time = -1;
|
||||
uint32_t timediff = 0;
|
||||
FILE *file = NULL;
|
||||
|
||||
|
|
@ -159,7 +177,7 @@ static time_t check_file(LinphoneCoreManager* mgr) {
|
|||
size_t line_size = 256;
|
||||
#ifndef WIN32
|
||||
struct tm tm_curr = {0};
|
||||
time_t time_prev = -1;
|
||||
time_t time_prev = 0;
|
||||
#endif
|
||||
|
||||
#if HAVE_ZLIB
|
||||
|
|
@ -182,10 +200,13 @@ static time_t check_file(LinphoneCoreManager* mgr) {
|
|||
if (strlen(line) > 24) {
|
||||
char date[24] = {'\0'};
|
||||
memcpy(date, line, 23);
|
||||
/*reset tm_curr to reset milliseconds and below fields*/
|
||||
memset(&tm_curr, 0, sizeof(struct tm));
|
||||
if (strptime(date, "%Y-%m-%d %H:%M:%S", &tm_curr) != NULL) {
|
||||
time_curr = mktime(&tm_curr);
|
||||
CU_ASSERT_TRUE(time_curr >= time_prev);
|
||||
time_prev = time_curr;
|
||||
tm_curr.tm_isdst = -1; // LOL
|
||||
log_time = mktime(&tm_curr);
|
||||
CU_ASSERT_TRUE(log_time >= time_prev);
|
||||
time_prev = log_time;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
@ -196,19 +217,27 @@ static time_t check_file(LinphoneCoreManager* mgr) {
|
|||
ms_free(filepath);
|
||||
|
||||
|
||||
timediff = labs((long int)time_curr - (long int)last_log);
|
||||
timediff = labs((long int)log_time - (long int)cur_time);
|
||||
(void)timediff;
|
||||
#ifndef WIN32
|
||||
CU_ASSERT_TRUE( timediff <= 1 );
|
||||
if( !(timediff <= 1) ){
|
||||
ms_error("time_curr: %ld, last_log: %ld timediff: %u", (long int)time_curr, (long int)last_log, timediff );
|
||||
char buffers[2][128] = {{0}};
|
||||
strftime(buffers[0], sizeof(buffers[0]), "%Y-%m-%d %H:%M:%S", localtime(&log_time));
|
||||
strftime(buffers[1], sizeof(buffers[1]), "%Y-%m-%d %H:%M:%S", localtime(&cur_time));
|
||||
|
||||
ms_error("log_time: %ld (%s), cur_time: %ld (%s) timediff: %u"
|
||||
, (long int)log_time, buffers[0]
|
||||
, (long int)cur_time, buffers[1]
|
||||
, timediff
|
||||
);
|
||||
}
|
||||
#else
|
||||
ms_warning("strptime() not available for this platform, test is incomplete.");
|
||||
#endif
|
||||
}
|
||||
// return latest time in file
|
||||
return time_curr;
|
||||
return log_time;
|
||||
}
|
||||
|
||||
static void collect_files_disabled() {
|
||||
|
|
|
|||
|
|
@ -197,10 +197,14 @@ static void profile_call_base(bool_t avpf1, LinphoneMediaEncryption srtp1,bool_t
|
|||
CU_ASSERT_TRUE(call(marie, pauline));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallStreamsRunning, 1));
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1));
|
||||
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);
|
||||
if (linphone_core_get_current_call(marie->lc)) {
|
||||
params = linphone_call_get_current_params(linphone_core_get_current_call(marie->lc));
|
||||
CU_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile);
|
||||
}
|
||||
if (linphone_core_get_current_call(pauline->lc)) {
|
||||
params = linphone_call_get_current_params(linphone_core_get_current_call(pauline->lc));
|
||||
CU_ASSERT_STRING_EQUAL(linphone_call_params_get_rtp_profile(params), expected_profile);
|
||||
}
|
||||
|
||||
linphone_core_terminate_all_calls(marie->lc);
|
||||
CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallEnd, 1));
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ video_rtp_port=9410-9910
|
|||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=vga
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ video_rtp_port=28070-38000
|
|||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=vga
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
|
|
|
|||
54
tester/rcfiles/marie_zrtp_aes256_rc
Normal file
54
tester/rcfiles/marie_zrtp_aes256_rc
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
zrtp_cipher_suites=MS_ZRTP_CIPHER_AES3,MS_ZRTP_CIPHER_AES1
|
||||
|
||||
[auth_info_0]
|
||||
username=marie
|
||||
userid=marie
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip.example.org;transport=tcp
|
||||
reg_route=sip.example.org;transport=tcp;lr
|
||||
reg_identity="Super Marie" <sip:marie@sip.example.org>
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
quality_reporting_collector=sip:collector@sip.example.org
|
||||
quality_reporting_enabled=1
|
||||
|
||||
[friend_0]
|
||||
url="Paupoche" <sip:pauline@sip.example.org>
|
||||
pol=accept
|
||||
subscribe=0
|
||||
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=28070-38000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
54
tester/rcfiles/marie_zrtp_b256_rc
Normal file
54
tester/rcfiles/marie_zrtp_b256_rc
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
zrtp_sas_suites=MS_ZRTP_SAS_B256
|
||||
|
||||
[auth_info_0]
|
||||
username=marie
|
||||
userid=marie
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip.example.org;transport=tcp
|
||||
reg_route=sip.example.org;transport=tcp;lr
|
||||
reg_identity="Super Marie" <sip:marie@sip.example.org>
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
quality_reporting_collector=sip:collector@sip.example.org
|
||||
quality_reporting_enabled=1
|
||||
|
||||
[friend_0]
|
||||
url="Paupoche" <sip:pauline@sip.example.org>
|
||||
pol=accept
|
||||
subscribe=0
|
||||
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=28070-38000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
54
tester/rcfiles/marie_zrtp_srtpsuite_aes256_rc
Normal file
54
tester/rcfiles/marie_zrtp_srtpsuite_aes256_rc
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
srtp_crypto_suites=AES_CM_256_HMAC_SHA1_80,AES_CM_256_HMAC_SHA1_32
|
||||
|
||||
[auth_info_0]
|
||||
username=marie
|
||||
userid=marie
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip.example.org;transport=tcp
|
||||
reg_route=sip.example.org;transport=tcp;lr
|
||||
reg_identity="Super Marie" <sip:marie@sip.example.org>
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
quality_reporting_collector=sip:collector@sip.example.org
|
||||
quality_reporting_enabled=1
|
||||
|
||||
[friend_0]
|
||||
url="Paupoche" <sip:pauline@sip.example.org>
|
||||
pol=accept
|
||||
subscribe=0
|
||||
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=28070-38000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
|
|
@ -36,7 +36,7 @@ video_rtp_port=39072-49000
|
|||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=vga
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
|
|
|
|||
51
tester/rcfiles/pauline_zrtp_aes256_rc
Normal file
51
tester/rcfiles/pauline_zrtp_aes256_rc
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
zrtp_cipher_suites=MS_ZRTP_CIPHER_AES3,MS_ZRTP_CIPHER_AES1
|
||||
|
||||
[auth_info_0]
|
||||
username=pauline
|
||||
userid=pauline
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip2.linphone.org;transport=tls
|
||||
reg_route=sip2.linphone.org;transport=tls
|
||||
reg_identity=sip:pauline@sip.example.org
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
|
||||
#[friend_0]
|
||||
#url="Mariette" <sip:marie@sip.example.org>
|
||||
#pol=accept
|
||||
#subscribe=0
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=39072-49000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
51
tester/rcfiles/pauline_zrtp_b256_rc
Normal file
51
tester/rcfiles/pauline_zrtp_b256_rc
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
zrtp_sas_suites=MS_ZRTP_SAS_B256
|
||||
|
||||
[auth_info_0]
|
||||
username=pauline
|
||||
userid=pauline
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip2.linphone.org;transport=tls
|
||||
reg_route=sip2.linphone.org;transport=tls
|
||||
reg_identity=sip:pauline@sip.example.org
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
|
||||
#[friend_0]
|
||||
#url="Mariette" <sip:marie@sip.example.org>
|
||||
#pol=accept
|
||||
#subscribe=0
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=39072-49000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
51
tester/rcfiles/pauline_zrtp_srtpsuite_aes256_rc
Normal file
51
tester/rcfiles/pauline_zrtp_srtpsuite_aes256_rc
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
[sip]
|
||||
sip_port=-1
|
||||
sip_tcp_port=-1
|
||||
sip_tls_port=-1
|
||||
default_proxy=0
|
||||
ping_with_options=0
|
||||
register_only_when_network_is_up=0
|
||||
composing_idle_timeout=1
|
||||
srtp_crypto_suites=AES_CM_256_HMAC_SHA1_80,AES_CM_256_HMAC_SHA1_32
|
||||
|
||||
[auth_info_0]
|
||||
username=pauline
|
||||
userid=pauline
|
||||
passwd=secret
|
||||
realm=sip.example.org
|
||||
|
||||
|
||||
[proxy_0]
|
||||
reg_proxy=sip2.linphone.org;transport=tls
|
||||
reg_route=sip2.linphone.org;transport=tls
|
||||
reg_identity=sip:pauline@sip.example.org
|
||||
reg_expires=3600
|
||||
reg_sendregister=1
|
||||
publish=0
|
||||
dial_escape_plus=0
|
||||
|
||||
#[friend_0]
|
||||
#url="Mariette" <sip:marie@sip.example.org>
|
||||
#pol=accept
|
||||
#subscribe=0
|
||||
|
||||
[rtp]
|
||||
audio_rtp_port=18070-28000
|
||||
video_rtp_port=39072-49000
|
||||
|
||||
[video]
|
||||
display=0
|
||||
capture=0
|
||||
show_local=0
|
||||
size=qcif
|
||||
enabled=0
|
||||
self_view=0
|
||||
automatically_initiate=0
|
||||
automatically_accept=0
|
||||
device=StaticImage: Static picture
|
||||
|
||||
[sound]
|
||||
echocancellation=0 #to not overload cpu in case of VG
|
||||
|
||||
[net]
|
||||
dns_srv_enabled=0 #no srv needed in general
|
||||
|
|
@ -259,6 +259,23 @@ LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) {
|
|||
linphone_core_set_ringback(mgr->lc, NULL);
|
||||
#endif
|
||||
|
||||
#ifdef VIDEO_ENABLED
|
||||
{
|
||||
MSWebCam *cam;
|
||||
|
||||
cam = ms_web_cam_manager_get_cam(ms_web_cam_manager_get(), "Mire: Mire (synthetic moving picture)");
|
||||
|
||||
if (cam == NULL) {
|
||||
MSWebCamDesc *desc = ms_mire_webcam_desc_get();
|
||||
if (desc){
|
||||
cam=ms_web_cam_new(desc);
|
||||
ms_web_cam_manager_add_cam(ms_web_cam_manager_get(), cam);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if( manager_count >= 2){
|
||||
char hellopath[512];
|
||||
char *recordpath = ms_strdup_printf("%s/record_for_lc_%p.wav",bc_tester_writable_dir_prefix,mgr->lc);
|
||||
|
|
@ -269,6 +286,7 @@ LinphoneCoreManager* linphone_core_manager_init(const char* rc_file) {
|
|||
linphone_core_set_record_file(mgr->lc,recordpath);
|
||||
ms_free(recordpath);
|
||||
}
|
||||
linphone_core_set_user_certificates_path(mgr->lc,bc_tester_writable_dir_prefix);
|
||||
|
||||
if (rc_path) ms_free(rc_path);
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ EXTRA_DIST=xml2lpc_jni.cc lpc2xml_jni.cc
|
|||
|
||||
if BUILD_TOOLS
|
||||
|
||||
bin_PROGRAMS=xml2lpc_test lpc2xml_test lp-gen-wrappers
|
||||
bin_PROGRAMS=xml2lpc_test lpc2xml_test lp-gen-wrappers auto_answer
|
||||
|
||||
xml2lpc_test_SOURCES=\
|
||||
xml2lpc_test.c
|
||||
|
|
@ -42,6 +42,12 @@ lp_gen_wrappers_SOURCES=genwrappers.cc \
|
|||
lp_gen_wrappers_LDADD= \
|
||||
$(LIBXML2_LIBS)
|
||||
|
||||
auto_answer_SOURCES=auto_answer.c
|
||||
auto_answer_CFLAGS=$(COMMON_CFLAGS)
|
||||
auto_answer_LDADD=\
|
||||
$(top_builddir)/coreapi/liblinphone.la \
|
||||
$(MEDIASTREAMER_LIBS)
|
||||
|
||||
endif
|
||||
|
||||
|
||||
|
|
|
|||
158
tools/auto_answer.c
Normal file
158
tools/auto_answer.c
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
/*
|
||||
linphone
|
||||
Copyright (C) 2010 Belledonne Communications SARL
|
||||
(simon.morlat@linphone.org)
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
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.
|
||||
*/
|
||||
|
||||
|
||||
#ifdef IN_LINPHONE
|
||||
#include "linphonecore.h"
|
||||
#else
|
||||
#include "linphone/linphonecore.h"
|
||||
#endif
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include "config.h"
|
||||
#endif
|
||||
#include <signal.h>
|
||||
|
||||
static bool_t running=TRUE;
|
||||
|
||||
static void stop(int signum){
|
||||
running=FALSE;
|
||||
}
|
||||
|
||||
#ifndef PACKAGE_DATA_DIR
|
||||
#define PACKAGE_DATA_DIR '.'
|
||||
#endif
|
||||
/*
|
||||
* Call state notification callback
|
||||
*/
|
||||
static void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState cstate, const char *msg){
|
||||
LinphoneCallParams * call_params;
|
||||
switch(cstate){
|
||||
case LinphoneCallIncomingReceived:
|
||||
ms_message("Incoming call arrive !\n");
|
||||
/* accept the incoming call*/
|
||||
call_params = linphone_core_create_default_call_parameters(lc);
|
||||
linphone_call_params_enable_video(call_params,TRUE);
|
||||
linphone_call_params_set_audio_direction(call_params,LinphoneMediaDirectionSendOnly);
|
||||
linphone_call_params_set_video_direction(call_params,LinphoneMediaDirectionSendOnly);
|
||||
linphone_core_accept_call_with_params(lc,call,call_params);
|
||||
linphone_call_params_destroy(call_params);
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
extern MSWebCamDesc mire_desc;
|
||||
static void helper() {
|
||||
printf("auto_answer --help\n"
|
||||
"\t\t\t--listening-uri <uri> uri to listen on, default [sip:localhost:5060]\n"
|
||||
"\t\t\t--verbose\n");
|
||||
exit(0);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]){
|
||||
LinphoneCoreVTable vtable={0};
|
||||
LinphoneCore *lc;
|
||||
LinphoneVideoPolicy policy;
|
||||
int i;
|
||||
LinphoneAddress *addr=NULL;
|
||||
LCSipTransports tp;
|
||||
char * tmp = NULL;
|
||||
LpConfig * lp_config = lp_config_new(NULL);
|
||||
policy.automatically_accept=TRUE;
|
||||
signal(SIGINT,stop);
|
||||
for(i = 1; i < argc; ++i) {
|
||||
if (strcmp(argv[i], "--verbose") == 0) {
|
||||
linphone_core_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
} else if (strcmp(argv[i], "--listening-uri") == 0){
|
||||
addr = linphone_address_new(argv[++i]);
|
||||
if (!addr) {
|
||||
printf("Error, bad sip uri");
|
||||
helper();
|
||||
}
|
||||
/* switch(linphone_address_get_transport(addr)) {
|
||||
case LinphoneTransportUdp:
|
||||
case LinphoneTransportTcp:
|
||||
break;
|
||||
default:
|
||||
ms_error("Error, bad sip uri [%s] transport, should be udp | tcp",argv[i]);
|
||||
helper();
|
||||
break;
|
||||
}*/
|
||||
} else {
|
||||
helper();
|
||||
}
|
||||
}
|
||||
|
||||
if (!addr) {
|
||||
addr = linphone_address_new("sip:bot@0.0.0.0:5060");
|
||||
}
|
||||
|
||||
lp_config_set_string(lp_config,"sip","bind_address",linphone_address_get_domain(addr));
|
||||
lp_config_set_string(lp_config,"rtp","bind_address",linphone_address_get_domain(addr));
|
||||
|
||||
vtable.call_state_changed=call_state_changed;
|
||||
|
||||
lc=linphone_core_new_with_config(&vtable,lp_config,NULL);
|
||||
linphone_core_enable_video_capture(lc,TRUE);
|
||||
linphone_core_enable_video_display(lc,FALSE);
|
||||
linphone_core_set_video_policy(lc,&policy);
|
||||
|
||||
|
||||
/*instead of using sound capture card, a file is played to the calling party*/
|
||||
linphone_core_set_play_file(lc,PACKAGE_DATA_DIR "/sounds/linphone/hello16000.wav");
|
||||
linphone_core_set_use_files(lc,TRUE);
|
||||
|
||||
{
|
||||
MSWebCamDesc *desc = ms_mire_webcam_desc_get();
|
||||
if (desc){
|
||||
ms_web_cam_manager_add_cam(ms_web_cam_manager_get(),ms_web_cam_new(desc));
|
||||
linphone_core_set_video_device(lc,"Mire: Mire (synthetic moving picture)");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
memset(&tp,0,sizeof(LCSipTransports));
|
||||
|
||||
tp.udp_port = linphone_address_get_port(addr);
|
||||
tp.tcp_port = linphone_address_get_port(addr);
|
||||
|
||||
linphone_core_set_sip_transports(lc,&tp);
|
||||
linphone_core_set_audio_port_range(lc,1024,65000);
|
||||
linphone_core_set_preferred_framerate(lc,5);
|
||||
linphone_core_set_primary_contact(lc,tmp=linphone_address_as_string(addr));
|
||||
ms_free(tmp);
|
||||
|
||||
/* main loop for receiving notifications and doing background linphonecore work: */
|
||||
while(running){
|
||||
linphone_core_iterate(lc);
|
||||
ms_usleep(50000);
|
||||
}
|
||||
|
||||
ms_message("Shutting down...\n");
|
||||
linphone_core_destroy(lc);
|
||||
ms_message("Exited\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -58,6 +58,7 @@ blacklisted_functions = [
|
|||
'linphone_core_set_log_file', # There is no use to wrap this function
|
||||
'linphone_core_set_log_handler', # Hand-written but put directly in the linphone module
|
||||
'linphone_core_set_log_level', # There is no use to wrap this function
|
||||
'linphone_core_set_log_level_mask', # There is no use to wrap this function
|
||||
'linphone_core_set_video_policy', # missing LinphoneVideoPolicy
|
||||
'linphone_proxy_config_get_privacy', # missing LinphonePrivacyMask
|
||||
'linphone_proxy_config_normalize_number', # to be handwritten because of result via arguments
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ static void pylinphone_module_log_handler(OrtpLogLevel lev, const char *fmt, va_
|
|||
static void pylinphone_init_logging(void) {
|
||||
linphone_core_serialize_logs();
|
||||
linphone_core_set_log_handler(pylinphone_module_log_handler);
|
||||
linphone_core_set_log_level(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
linphone_core_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue